Import complexType key / value from WSDL to WCF and Biztalk

I have been struggling with this for many days, not even knowing how to solve it. Basically, I have the following WSDL service definition:

<?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI version is Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI version is Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://sample.org/schemas/2012" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://sample.org/schemas/2012" name="SampleServiceImplService"> <types> <xsd:schema> <xsd:import namespace="http://sample.org/schemas/2012" schemaLocation="http://localhost:8080/sampleServices_war_exploded/sample?xsd=1"/> </xsd:schema> </types> <message name="ExecuteSample"> <part name="parameters" element="tns:ExecuteSample"/> </message> <message name="ExecuteSampleResponse"> <part name="parameters" element="tns:ExecuteSampleResponse"/> </message> <message name="SampleException"> <part name="fault" element="tns:SampleException"/> </message> <portType name="SampleService"> <operation name="ExecuteSample"> <input wsam:Action="http://sample.org/schemas/2012/SampleService/ExecuteSampleRequest" message="tns:ExecuteSample"/> <output wsam:Action="http://sample.org/schemas/2012/SampleService/ExecuteSampleResponse" message="tns:ExecuteSampleResponse"/> <fault message="tns:SampleException" name="SampleException" wsam:Action="http://sample.org/schemas/2012/SampleService/ExecuteSample/Fault/SampleException"/> </operation> </portType> <binding name="SampleServiceImplPortBinding" type="tns:SampleService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="ExecuteSample"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> <fault name="SampleException"> <soap:fault name="SampleException" use="literal"/> </fault> </operation> </binding> <service name="SampleServiceImplService"> <port name="SampleServiceImplPort" binding="tns:SampleServiceImplPortBinding"> <soap:address location="http://localhost:8080/sampleServices_war_exploded/sample"/> </port> </service> </definitions> 

Associated XSD file:

 <?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI version is Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown. --><xs:schema xmlns:tns="http://sample.org/schemas/2012" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://sample.org/schemas/2012"> <xs:element name="ExecuteSample" type="tns:ExecuteSample"/> <xs:element name="ExecuteSampleResponse" type="tns:ExecuteSampleResponse"/> <xs:element name="SampleException" nillable="true" type="tns:faultInfo"/> <xs:complexType name="ExecuteSample"> <xs:sequence> <xs:element name="name" type="xs:string" minOccurs="0"/> <xs:element name="values"> <xs:complexType> <xs:sequence> <xs:element name="entry" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="key" minOccurs="0" type="xs:string"/> <xs:element name="value" minOccurs="0" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="ExecuteSampleResponse"> <xs:sequence/> </xs:complexType> <xs:complexType name="faultInfo"> <xs:sequence/> </xs:complexType> </xs:schema> 

Ok, the documents look great, we define a complexType called ExecuteSample (request type) that contains two members, name and values, the last one is another complex type with an entry called "entry" with key and values.

It is like a dictionary, and actually it is a dictionary. He even uses the β€œproposed” way to expose dictionaries with the only difference that is wrapped inside the β€œentry” parameter.

Well guess what, WCF svcutil nor biztalk can recognize WSDL. SVCUtil and Visual Studio fail with a very silly error telling me something like:

 Warning 1 Custom tool warning: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter Error: Object reference not set to an instance of an object. XPath to Error Source: //wsdl:definitions[@targetNamespace='http://sample.org/schemas/2012']/wsdl:portType[@name='SampleService'] C:\src\biztalk\ConsoleApplication6\ConsoleApplication6\Service References\ServiceReference1\Reference.svcmap 1 1 ConsoleApplication6 

The biztalk WSDL import wizard crashes without an error message, just telling me that something is wrong ...

I tried everything and watched everything possible on the Internet, nothing really pops up. I am desperate and have no idea what the hell is going on, everything looks great, but it doesn't work ...

Strange ... any idea?

+4
source share
1 answer

You need to add targetNamespace to the schema tag in the wsdl type section.

 <types> <xsd:schema targetNamepace="http://blah.org"> ... </xsd:schema> </types> 
+2
source

Source: https://habr.com/ru/post/1444030/


All Articles