0

SOAP クライアント (Python SUDS) で問題を引き起こしている WSDL を使用しています。開発者が WSDL に追加<xs:import>する前は、SOAP クライアントは機能していましたが、現在は SOAP クライアントが機能しなくなりました。

奇妙なことは、名前空間の一部が名前空間の存在しない URL を参照していることです。解決しませんが、動作しているときに SOAP メソッドを呼び出すことができました。

私の感覚では、インポートが問題を引き起こしているということです。この WSDL スニペットが正しく、または有効に見えるかどうかを確認できる人はいますか? このページは、属性が必要であると信じさせ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>
4

1 に答える 1

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を適切に使用できません。

サービスプロバイダーにアクセスできる場合、最善の策は、欠落しているスキーマの場所を尋ねることです。

于 2012-05-11T04:04:57.093 に答える