【问题标题】:Is there something wrong with this XML import?这个 XML 导入有问题吗?
【发布时间】:2012-05-11 03:35:56
【问题描述】:

我使用的 WSDL 导致我的 SOAP 客户端 (Python SUDS) 出现问题。在开发人员将<xs:import> 添加到 WSDL 之前,我的 SOAP 客户端可以工作,但现在它阻塞了我的 SOAP 客户端。

奇怪的是,一些命名空间引用了一个不存在的命名空间 URL。即使它没有解决,我也能够在它工作时调用 SOAP 方法。

我的感觉是导入导致了问题。谁能验证这个 WSDL sn-p 看起来是否正确或有效? 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>

【问题讨论】:

    标签: xml wsdl xsd suds


    【解决方案1】:

    您是正确的,导入可能是问题的根源。命名空间通常由看起来像 URL 的字符串组成,尽管它们只是用作唯一的字符串。在 URL 实际解析的地方,它可以帮助解决您在此处遇到的问题,即拉入命名空间中定义的类型。

    import 语句的目的是将命名空间与定义命名空间组件的模式文件连接起来。正确的格式是:

    <xs:import namespace="http://sdk.mc.nonexistent.com/xsd" schemaLocation="{schema file URL}" />
    

    其中架构文件 URL 可以是与 wsdl 位于同一位置的文件的名称、文件系统路径或可通过网络访问的某个 URL。

    如果 WSDL 中没有组件使用这些名称空间的类型,则可以使用对名称空间的引用而不支持定义(模式)的 wsdl。在这种情况下,EventMoref 和 EventData 类型来自缺少的架构,没有架构文件,WSDL 就无法正确使用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-22
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多