我有这样的回应:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<Response xmlns="http://blahblahblah">
<SomeResult xmlns="">
<id>16</id>
<state>QUEQUE</state>
</SomeResult>
</Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我想从wsdl:
知道如何做到这一点<SomeResult xmlns="">
在wsdl中,我有这个:
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
[...] xlmns:tns="http://blahblahblah" targetNamespace="http://blahblahblah">
<types>
<xsd:schema elementFormDefault="qualified"
targetNamespace="http://blahblahblah">
[...]
<operation name="TheOperation">
<soap:operation soapAction="<anOperation>" style="document"/>
<input><soap:body use="literal" namespace="http://blahblahblah"/></input>
<output><soap:body use="literal" namespace="http://blahblahblah"/></output>
</operation>
[...]
<xsd:complexType name="TheOperationResponseType">
<xsd:all>
<xsd:element name="Response" type="tns:Response" form="unqualified"/>
</xsd:all>
</xsd:complexType>
[...]
<xsd:complexType name="Response">
<xsd:all>
<xsd:element name="id" type="xsd:int"/>
<xsd:element name="state" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
上下文:
老板给了我们wsdl,但有了这个,我只能得到这样的回答:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<Response xmlns="http://blahblahblah">
<SomeResult>
<id>16</id>
<state>QUEQUE</state>
</SomeResult>
</Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
而且......老板不想改变他的代码以与原始的wsd保持一致。 :(所以我需要知道如何创建一个与其真实答案兼容的WSDL,而不是从原始WSDL中定义的。
解决方案必须与wsdl ...语言无关(因此,我们不能在客户端代码中使用类似Java注释的东西使其与响应兼容......这是我们的第一种方法;)。
答案 0 :(得分:1)
默认名称空间声明中的属性值可以为空。 这在声明的范围内具有相同的效果 没有默认的命名空间。
因此,如果您想在响应中获取空的xmlns声明,则需要:
设置默认命名空间
的xmlns = “your_namespace”
并将SomeResult元素调整为另一个名称空间
在您的WSDL中,您调整了默认命名空间并添加以下设置:
xsd:schema elementFormDefault="qualified"
此设置表示您在架构顶部声明的targetNamespace仅适用于符合架构的XML文档中的元素。但您明确声明了响应元素的不合格选项。
<xsd:element name="Response" type="tns:Response" form="unqualified"/>
在这种情况下,Response元素获取null命名空间。没有此设置,请检查您的肥皂响应消息。