4

SOAP 応答の検証で奇妙な問題が発生しています。エラーを再現するために必要な最小限の応答と XSD をハッキングしました。XSD:

<?xml version="1.0"?>
<xs:schema targetNamespace="http://peoplesoft.com/rootResponse" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="ReturnID" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

SOAP 応答:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <root xmlns="http://peoplesoft.com/rootResponse">
      <ReturnID />
    </root>
  </soapenv:Body>
</soapenv:Envelope>

soapUI で元の応答を検証すると、要素 root@http://peoplesoft.com/rootResponse の「ReturnID@http://peoplesoft.com/rootResponse」ではなく、期待される要素「ReturnID」と表示されます

上記のファイルを Visual Studio 2012 にロードすると (はい、この XSD ファイルを使用して名前空間を検証するように Visual Studio に指示します)、次のようになります: The element 'root' in namespace 'http://peoplesoft.com/rootResponse ' の名前空間 'http://peoplesoft.com/rootResponse' に無効な子要素 'ReturnID' があります。期待される可能な要素のリスト: 'ReturnID'。

どちらの場合も、ReturnID要素について不平を言っていますが、ReturnID要素が必要だと言っていますか?

4

2 に答える 2

3

あなたがそうではない非常に珍しいインスタンスドキュメントを扱っていない限り、あなたの xs:schema 要素は属性を持つべきですelementFormDefault="qualified"。これがないと、ローカル要素の宣言 (ReturnID の宣言など) は、ターゲット名前空間の要素ではなく、名前空間のない要素を参照します。

于 2012-09-12T17:49:58.547 に答える
1

基本的に、xml バリデータは

返品ID

<ReturnID xmlns="http://peoplesoft.com/rootResponse" />

することが

ReturnID xmlns="http://peoplesoft.com/rootResponse"

<ReturnID />

ドキュメントを次のように変更します。

<ps:root xmlns:ps="http://peoplesoft.com/rootResponse">
  <ReturnID />
</ps:root>

編集 理由はroot xmlns="http://peoplesoft.com/rootResponse"、ドキュメントで指定することにより、すべての内部要素がこの名前空間も想定するためです。

于 2012-09-12T16:24:31.343 に答える