0

Softlayer SOAP サービスで IBM 鋳鉄を使用しようとしています。ここからダウンロードできるsoftlayer wsdlで検証エラーが発生します。検証は、酸素 v18 でも失敗します。どちらの場合も、wsdl のインクルード仕様でエラーが発生します。

<xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <xsd:include namespace="http://api.service.softlayer.com/soap/v3/"
    schemaLocation="https://api.softlayer.com/soap/v3/SoftLayer_Account?xsd"/>
</xsd:schema>

これがエラーです。

cvc-complex-type.3.2.2: 属性「namespace」は要素「xsd:include」に表示できません。

名前空間はインクルード仕様の有効な属性ではありません。全世界(私を除く)が正常に使用しているsoftlayerのwsdlが有効でないとは信じがたいです。名前空間属性を削除すると、tns:SoftLayer_Account への要素仕様参照で型定義を解決できないことがわかります。

<xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <xsd:complexType name="SoftLayer_AccountObjectMask">
    <xsd:sequence>
      <xsd:element minOccurs="1" maxOccurs="1" name="mask" type="tns:SoftLayer_Account"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

そして、wsdl 操作仕様のコンテキストでは、このような大量のエラーが発生します。

SOAP ヘッダーの名前空間が指定されていません。使用がエンコードされる場合、名前空間 URI を定義する必要があります。

これは、エラーが発生する操作の 1 つです。

<operation name="addReferralPartnerPaymentOption">
  <soap:operation soapAction="http://api.service.softlayer.com/soap/v3/SoftLayer_AccountAction"/>
  <input>
    <soap:header message="tns:authenticateHeader" part="authenticate" use="encoded"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
...

コンテキストとして、wsdl の最初の行を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:tns="http://api.service.softlayer.com/soap/v3/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="slApi"
  targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <types>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:include namespace="http://api.service.softlayer.com/soap/v3/"
        schemaLocation="https://api.softlayer.com/soap/v3/SoftLayer_Account?xsd"/>
    </xsd:schema>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:complexType name="SoftLayer_AccountObjectMask">
        <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="1" name="mask" type="tns:SoftLayer_Account"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </types>
  <message name="activatePartner">
    <part name="accountId" type="xsd:string"/>
    <part name="hashCode" type="xsd:string"/>
  </message>
...

そして、含まれているスキーマの先頭、SoftLayer_Account.xsd。

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:tns="http://api.service.softlayer.com/soap/v3/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="slApi"
  targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <types>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:include namespace="http://api.service.softlayer.com/soap/v3/"
        schemaLocation="https://api.softlayer.com/soap/v3/SoftLayer_Account?xsd"/>
    </xsd:schema>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:complexType name="SoftLayer_AccountObjectMask">
        <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="1" name="mask" type="tns:SoftLayer_Account"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </types>
  <message name="activatePartner">
    <part name="accountId" type="xsd:string"/>
    <part name="hashCode" type="xsd:string"/>
  </message>
...

私はソフトレイヤーから整形式の WSDL を期待していましたが、おそらくそうです。それは、私が wsdl と xml のトピックについてバカだからです。

ありがとう、パーク

4

2 に答える 2

0

まあ、それはあまり答えではありませんが、少なくとも回避策です。私の解決策は、SOAP ではなく鋳鉄を使用してソフトレイヤー サービスを処理するために REST API を使用することです。

于 2016-07-13T18:58:44.087 に答える
0

これは奇妙です。softlayer WSDL は、SOAP UI や Visual Studio の WSDL.exe などのツールで正常に動作します。XSD 参照を WSDL から削除することはできません。そうしないと、投稿で説明したような問題が発生します。

タグを変更してみて、それが機能するかどうかを確認できます。他の名前空間の要素を含むこの投稿 XSD を見てください。

とにかく、あなたが直面している問題は、使用しているツールが原因であり、softlayer からの間違った WSLD が原因ではないと思います。

于 2016-06-28T14:21:49.267 に答える