这个XML导入有问题吗?

时间:2012-05-11 03:35:57

标签: xml wsdl xsd suds

我正在使用导致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>

1 个答案:

答案 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。

如果您有权访问服务提供商,最好的办法是询问缺少的架构的位置。