when generating a proxy class from a wsdl which I got from a customer, I get the following warning from svcutil:
Warning: Fault named "ContractException" in operation "create" cannot be imported.
Unsupported WSDL, the fault message part must reference an element. This fault message
does not reference an element. If you have edit access to the WSDL document, you can fix
the problem by re开发者_开发问答ferencing a schema element using the 'element' attribute.
So, here are the parts from the wsdl in which the ContractException is mentioned
<schema targetNamespace="http://exceptions.webservice"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:impl="http://webservice"
xmlns:intf="http://webservice"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ContractException">
<sequence>
<element name="message" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
<element name="ContractException" nillable="true" type="tns3:ContractException"/>
</schema>
<wsdl:message name="ContractException">
<wsdl:part name="fault" type="tns3:ContractException"/>
</wsdl:message>
<wsdl:portType name="Contract">
<wsdl:operation name="create" parameterOrder="pApiKey pContractData">
<wsdl:input message="impl:createRequest" name="createRequest"/>
<wsdl:output message="impl:createResponse" name="createResponse"/>
<wsdl:fault message="impl:ContractException" name="ContractException"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:fault name="ContractException">
<wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
name="ContractException" use="encoded"/>
</wsdl:fault>
I cannot find any problems in this wsdl, but hopefully anyone can give me a hint what I have to change so my proxy gets generated successfully. The wsdl was donwloaded from the webserver, so I can edit my local copy (which I use for generating the proxy class).
Based on the error message displayed, the fault needs to be wrapped inside an element, i.e. -
instead of:
<wsdl:message name="ContractException">
<wsdl:part name="fault" type="tns3:ContractException"/>
</wsdl:message>
you need to do this:
<wsdl:message name="ContractException">
<wsdl:part name="fault" element="tns3:ContractException"/>
</wsdl:message>
精彩评论