Error when generating service interface from wsdl using svcutil - wcf

I'm trying to run the following command line but get an error. You can try to run the command yourself to test it, but i have placed the error i'm getting below.
svcutil /noConfig /language:C# /out:ICatalog.cs /n:*,ogc.csw.ebrim http://schemas.opengis.net/csw/2.0.2/profiles/ebrim/1.0/wsdl/2.0/csw-ebrim-interface.wsdl
I tried downloading the wsdl and modifying it a few different ways to get it work. But i haven't been able to find out what to modify to get it to work.
svcutil /noConfig /language:C# /out:ICatalog.cs /n:*,ogc.csw.ebrim http://localhost/temp/csw-ebrim-interface.wsdl
Does anyone know what i can modify to get this to generate code?
Any help would be greatly appreciated.
The error i get is:
Error: Cannot obtain Metadata from http://schemas.opengis.net/csw/2.0.2/profiles/ebrim/1.0/wsdl/2.0/csw-ebrim-interface.wsdl
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata pu
blishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.mic
rosoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error
URI: http://schemas.opengis.net/csw/2.0.2/profiles/ebrim/1.0/wsdl/2.0/csw-ebrim-interface.wsdl
Metadata contains a reference that cannot be resolved: 'http://schemas.opengis.net/csw/2.0.2/profiles/ebrim/1.0/wsdl/2.0/csw-e
brim-interface.wsdl'.
The content type text/xml of the response message does not match the content type of the binding (application/soap+xml; charse
t=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes
of the response were: '<?xml version="1.0" encoding="UTF-8"?>
<wsd:description
targetNamespace="http://www.opengis.net/cat/wrs/1.0/wsdl"
xmlns:tns="http://www.opengis.net/cat/wrs/1.0/wsdl"
xmlns:wrs="http://www.opengis.net/cat/wrs/1.0"
xmlns:iri="http://www.opengis.net/cat/wrs/1.0/iri"
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
xmlns:ows="http://www.opengis.net/ows"
xmlns:wsd="http://www.w3.org/ns/wsdl"
xmlns:wsdx="http://www.w3.org/ns/wsdl-extensions"
xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"
xmlns:whttp="http://www.w3.org/ns/wsdl/http"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://www.w3.org/ns/wsdl http://www.w3.org/2007/06/wsdl/wsdl20.xsd
http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd">
<wsd:documentation>
W3C WSDL interface descriptions for the CSW-ebRIM 1.0 catalogue service. This
document shall be imported by all instance-specific service descriptions.
</wsd:documentation>
<w'.
HTTP GET Error
URI: http://schemas.opengis.net/csw/2.0.2/profiles/ebrim/1.0/wsdl/2.0/csw-ebrim-interface.wsdl
The document at the url http://schemas.opengis.net/csw/2.0.2/profiles/ebrim/1.0/wsdl/2.0/csw-ebrim-interface.wsdl was not reco
gnized as a known document type.
The error message from each known type may help you fix the problem:
- Report from 'XML Schema' is 'The root element of a W3C XML Schema should be <schema> and its namespace should be 'http://www.w3.
org/2001/XMLSchema'.'.
- Report from 'DISCO Document' is 'Discovery document at the URL http://schemas.opengis.net/csw/2.0.2/profiles/ebrim/1.0/wsdl/2.0/
csw-ebrim-interface.wsdl could not be found.'.
- The document format is not recognized.
- Report from 'WSDL Document' is 'There is an error in XML document (2, 2).'.
- <description xmlns='http://www.w3.org/ns/wsdl'> was not expected.

Related

Creating client jar from a WSDL

I am supposed to consume a SOAP service exposed by a third party. I have 2 basic questions w.r.t that:
Q1. The WSDL needs a basic authentication to access through the browser. Now when I try creating the client jar using wsgen/WSDL2JAVA/ using Eclipse Webservice client, I get HTTP 401 unauthorised. If I download and save the WSDL locally and then use axis's WSDL2JAVA, I get
Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:178)
at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'file:/C:/TEST/TOOLS/Authentication.wsdl'.: org.xml.sax.SAXParseException: The prefix "wsdl" for element "wsdl:definitions" is not bound.
at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.readInTheWSDLFile(CodeGenerationEngine.java:320)
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:133)
... 2 more
Caused by: org.xml.sax.SAXParseException: The prefix "wsdl" for element "wsdl:definitions" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
... 7 more
Q2. How do we handle a frequently changing WSDL, do we generate the client jars everytime and redeploy the application?
Any pointers in helping me create the client.jar would be great.
You should definitely redeploy your client.jar for every change in WSDL.
I would suggest you this.
Create a jar project to generate classes from wsdl. Check cxf-codegen-plugin wsdl2java for example.
Create another jar project(Client.jar) that refer the previous project.
So whenever a change in WSDL you should modify the WSDL URL in the project and then build both jar project to create Client.jar. Better practice is to use the WSDL URL as a configurable property value inside or outside the Client.jar for maintaining it.
Hope this helps.
In your wsdl file, check the "<"wsdl:definitions">" tag for the xmlns:wsdl attribute, if this is missing it will throw the error:
"org.xml.sax.SAXParseException: The prefix "wsdl" for element "wsdl:definitions" is not bound" found on line 5 of the error summary you posted.
In the example below you will see prefixes being defined by the xmlns (xml namespace) attribute:
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns1="http://org.apache.axis2/xsd"
xmlns:ns="http://pojo.service.quickstart.samples"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
targetNamespace="http://pojo.service.quickstart.samples">
Review how xml namespaces work here:
http://www.w3schools.com/xml/xml_namespaces.asp

Unable to reference WSDL of WCF web service hosted on AppFabric

I have developed a WCF service and, while in Visual Studio 2010, I can import the WSDL without a problem. After I've deployed it to AppFabric, I get the WSDL, but several schema files referenced internally in the WSDL cannot be found, for some reason. I don't know if it's a configuration issue, or what. The error I get when I try to process the WSDL in Visual Studio 2010 follows below:
Metadata contains a reference that cannot be resolved:
'http://myserver.mydomain.com:9871/app_deploy/MyAppService.svc?wsdl'.
The WSDL document contains links that could not be resolved.
There was an error downloading 'http://myserver.mydomain.com:9871/app_deploy/MyAppService.svc?xsd=xsd0'.
The request failed with HTTP status 502: Proxy Error ( The
specified network name is no longer available. ).
Metadata contains a reference that cannot be resolved:
'http://myserver.mydomain.com:9871/app_deploy/MyAppService.svc'.
There was no endpoint listening at http://myserver.mydomain.com:9871/app_deploy/MyAppService.svc
that could accept the message. This is
often caused by an incorrect address
or SOAP action. See InnerException, if
present, for more details.
The remote server returned an error: (404) Not Found.
If the service is defined in the current solution, try building the
solution and adding the service reference again.
The error is a proxy error because it goes through a proxy, but the error is because the page isn't there. I've tried accessing http://localhost:9871/app_deploy/MyAppService.svc?xsd=xsd0 at the server, but I get 404.
Why wouldn't these xsd files being found? Is it a deployment issue?
Any help would be greatly appreciated.
Man, I finally found the problem here. I needed write permission on C:\Windows\Temp for Application Pool user!

Error generating proxy with svcutil

while trying to generate a proxy from this WebService (http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl) I'm receiving this error from svcutil:
Error: Cannot obtain Metadata from
http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl
If this is a Windows (R) Communication
Foundation service to which you have
access, please check that you have
enabled metadata publishing at the
specified address. For help enabling
metadata publishing, please refer to
the MSDN documentation at
http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error
URI: http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl
Metadata contains a reference that cannot be resolved:
'http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl'.
The content type text/xml; charset=utf-8 of the response message
does not match the content type of the
binding (application/soap+xml;
charset=utf-8). If using a custom
encoder, be sure that the
IsContentTypeSupported method is
implemented properly. The first 553
bytes of the response were: '
ns1:Client.NoSOAPAction
no SOAPAction
header!
usalwsc01
'.
The remote server returned an error: (500) Internal Server Error.
HTTP GET Error
URI: http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl
The document at the url http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl
was not recognized as a known document
type. The error message from each
known type may help you fix the
problem:
- Report from 'XML Schema' is 'The root element of a W3C XML Schema
should be and its namespace
should be
'http://www.w3.org/2001/XMLSchema'.'.
- Report from 'DISCO Document' is 'Discovery document at the URL
http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl
could not be found.'.
- The document format is not recognized.
- Report from 'WSDL Document' is 'There is an error in XML document
(242, 18).'.
Namespace prefix 'impl:wb' is not defined.
I invoked svcutil with these parameters:
svcutil /n:
*,WB.Client /et:WB.Client.WSResultObject
/o:Client\WBServices /noConfig
http://scdemo14.infor.com:9014/axis/services/wb:wsclocks-inbound?wsdl
Does anyone have an idea what can I do to generate a proxy? I cannot change the service on the server side.
The problem is that the service uses a naming convention for the binding which is incompatible with svcutil. You can get round this as follows:
Browse the service's WSDL URL and
save the WSDL to a local file.
Then make the following changes to the file:
Remove the namespace prefix from the name used for the wsdl:binding i.e. change
name="wb:wsclocks-inboundSoapBinding" to be
name="wsclocks-inboundSoapBinding"
Change the binding attribute of the wsdl:port attribute to match, and also remove the namespace prefix from the value of the name attribute, so it is just wsclocks-inbound.
Then run svcutil <wsdl-file-path> /o:Client\WBServices /noConfig

How to Create WCF proxy class given wsdl file

I have wsdl file with me.But i don't have access to the file where it is deployed.
I need to generate proxy class using the WSDl file. I am getting error while using svcutil.ece to generate proxy file
Error: Cannot import wsdl:port Detail:
Cannot find definition for
http://www.cii.com/Soa/Foundation:Basi
cHttp. Service Description with
namespace
htt://www.cii.com/Soa/Foundat ion is
missing. Parameter name: name XPath to
Error Source:
//wsdl:definitions[#targetNamespace='http://www.cii.com/Soa/Foundation/MessageDefinition.xsd']/wsdl:service[#name='CareerServicesS
ervice']/wsdl:port[#name='BasicHttp']
Thanks,
Shodhan
If you are using svcutil with a locally downloaded WSDL file, you need to also download all related XSD files and pass them on the svcutil command line as well. A great tool for automatically downloading all related XSD files is disco.exe in the Windows / .NET SDK (and there may be a svcutil mode that does it as well, don't remember for sure).

How can I make WCF talk to this web service?

This is a follow up of this question.
As suggested by #Benjamin here, I am trying to add a service reference for my wsdl now (in stead of a web reference). Here is the url to the wsdl in question:
https://eu.link.fiatauto.com/tsi/DDUWsAut.php?wsdl
The problem is that Visual Studio generates an empty codefile:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.3603
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace test.ServiceReference1 {
}
When I try to manually generate the code using svcutil, I get the following:
C:\temp>svcutil https://eu.link.fiatauto.com/tsi/DDUWsAut.php?wsdl
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.2152]
Copyright (c) Microsoft Corporation. All rights reserved.
Attempting to download metadata from 'https://eu.link.fiatauto.com/tsi/DDUWsAut.
php?wsdl' using WS-Metadata Exchange or DISCO.
Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.Se
rviceModel.Description.XmlSerializerMessageContractImporter
Error: The ' ' character, hexadecimal value 0x20, cannot be included in a name.
Parameter name: name
XPath to Error Source: //wsdl:definitions[#targetNamespace='urn:ddu']/wsdl:portT
ype[#name='dduPortType']
Error: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is de
pendent on.
XPath to wsdl:portType: //wsdl:definitions[#targetNamespace='urn:ddu']/wsdl:port
Type[#name='dduPortType']
XPath to Error Source: //wsdl:definitions[#targetNamespace='urn:ddu']/wsdl:bindi
ng[#name='dduBinding']
Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is depend
ent on.
XPath to wsdl:binding: //wsdl:definitions[#targetNamespace='urn:ddu']/wsdl:bindi
ng[#name='dduBinding']
XPath to Error Source: //wsdl:definitions[#targetNamespace='urn:ddu']/wsdl:servi
ce[#name='ddu']/wsdl:port[#name='dduPort']
Generating files...
Warning: No code was generated.
If you were trying to generate a client, this could be because the metadata docu
ments did not contain any valid contracts or services
or because all contracts/services were discovered to exist in /reference assembl
ies. Verify that you passed all the metadata documents to the tool.
Warning: If you would like to generate data contracts from schemas make sure to
use the /dataContractOnly option.
Maybe this has also something to do with the fact that there are problems when trying to use the service by adding a web reference in stead of a service reference (see my other question)?
I guess there's something wrong with that wsdl, but I can't find what exactly.
As this is a third party service which is already used by others, I don't think they will be willing to change their service, so are there any workarounds to let .NET talk to that web service?
There's a bug in the WSDL. The final part in the dduAbortRequest message has a space at the end of the name. That's probably just a bug. Tell them about it, and they'll fix it, and they'll thank you for telling them.
The WSDL is just plain invalid as-is.
<message name="dduAbortRequest">
<part name="Ticket" type="xsd:string"/>
<part name="ServiceId" type="xsd:string"/>
<part name="LoginId" type="xsd:string"/>
<part name="DocId " type="xsd:string"/> <!-- Should be "DocId" -->
</message>
Disclaimer: This is probably not a direct answer to your question BUT I just wasted 3 hours trying to fix this same error message - so I want to post this here too.
This Warning: No code was generated error message can also be triggered by lack of permissions to the app pool user on the C:\Windows\Temp directory (yes really!).
If you're getting this error I first suggest you switch to the command line if you're trying to use the 'Add Service Reference' dialog. Run this command with Fiddler open for your service URL.
svcutil.exe https://dev.example.com/ShoppingCartWS/WCF/ShoppingCartWCF.svc?wsdl
If you see any of the requests come back as 500 (in red) and the following response:
ReadResponse() failed: The server did not return a response for this request.
Then check C:\Windows\Temp and just add whatever user your app pool is running at to have permissions.
This is where I found the solution - many thanks!.