我正在使用导致SOAP客户端(Python SUDS)出现问题的WSDL。在开发人员将<xs:import>
添加到WSDL之前,我的SOAP客户端正在运行,但现在它会阻塞我的SOAP客户端。
奇怪的是,某些命名空间引用了命名空间的不存在的URL。即使它没有解决,我也可以在它工作时调用SOAP方法。
我的感觉是导入导致问题。任何人都可以验证此WSDL代码段是正确还是有效? This页面让我相信schemaLocation
属性是必要的,但我甚至不知道该放入什么内容。
<wsdl:definitions xmlns:ns1="http://org.apache.axis2/xsd"
xmlns:ns="http://sdk.mc.nonexistent.com" xmlns:nsv1="http://v1.sdk.mc.nonexistent.com"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:mcxsv1="http://v1.sdk.mc.nonexistent.com/xsd"
xmlns:mcxs="http://sdk.mc.nonexistent.com/xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
targetNamespace="http://sdk.mc.nonexistent.com">
<wsdl:types>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://sdk.mc.nonexistent.com/xsd">
...
</xs:schema>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://v1.sdk.mc.nonexistent.com/xsd">
<xs:import namespace="http://sdk.mc.nonexistent.com/xsd"/>
<xs:complexType name="MethodFault_v1">
<xs:choice>
<xs:element minOccurs="0" name="faultMessage" type="xs:string"/>
<xs:element minOccurs="0" name="event" type="mcxs:EventMoref"/>
<xs:element minOccurs="0" name="eventData" type="mcxs:EventData"/>
</xs:choice>
</xs:complexType>
...
</xs:schema>
答案 0 :(得分:2)
您是正确的,导入可能是问题的根源。命名空间通常包含类似于URL的字符串,尽管它们仅用作唯一字符串。在URL实际解析的地方,它可以帮助解决您在此处遇到的问题,并提取命名空间中定义的类型。
import语句的目的是将命名空间连接到定义命名空间组件的模式文件。正确的格式是:
<xs:import namespace="http://sdk.mc.nonexistent.com/xsd" schemaLocation="{schema file URL}" />
其中模式文件URL可以是wsdl所在位置的文件名,文件系统路径或可通过网络访问的某些URL。
如果WSDL中没有组件使用这些名称空间的类型,则可以使用带有名称空间参考的wsdl而不支持定义(模式)。在这种情况下,EventMoref和EventData类型来自缺少的模式,如果没有模式文件,则无法正确使用WSDL。
如果您有权访问服务提供商,最好的办法是询问缺少的架构的位置。