応答ペイロードを追加する SOAP エンベロープがあります。名前空間を定義しました:
xmlns="http://custom.nsendpoint.com/1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
応答要素で。
custom.nsendpoint.com/1.1 XSD には、基本型から拡張された 2 つの要素があります。
<xs:complexType name="Contact">
<xs:annotation>
<xs:documentation>
A Contact
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="EmailAddress" type="s:ContactEmailAddress" minOccurs="0" maxOccurs="1" nillable="true" />
<xs:element name="Address" type="s:Address" minOccurs="0" maxOccurs="1" nillable="true" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="CompanyContact">
<xs:annotation>
<xs:documentation>
Company Contact type
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="Contact">
<xs:sequence>
<xs:element name="Name" type="s:CompanyName" minOccurs="1" maxOccurs="1" nillable="true" />
<xs:element name="Type" type="s:CompanyType" minOccurs="0" maxOccurs="1" nillable="true" />
<xs:element name="Size" type="s:CompanySize" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="PersonContact">
<xs:annotation>
<xs:documentation>
Person Contact type
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="Contact">
<xs:sequence>
<xs:element name="Title" type="s:PersonTitle" minOccurs="1" maxOccurs="1"/>
<xs:element name="FirstName" type="s:PersonFirstName" minOccurs="1" maxOccurs="1" />
<xs:element name="MiddleName" type="s:PersonMiddleName" minOccurs="0" maxOccurs="1" nillable="true" />
<xs:element name="LastName" type="s:PersonLastName" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
したがって、次のような型を定義します。
<Contact xsi:type="PersonContact">
<EmailAddress>foo.bar@gmail.com</EmailAddress>
<Address>
<Street xmlns="http://custom.nsendpoint/contacts/1.1">10 New Street</Street>
<Suburb xmlns="http://custom.nsendpoint/contacts/1.1">Hobboken</Suburb>
<City xmlns="http://custom.nsendpoint/contacts/1.1">New York</City>
<State xmlns="http://custom.nsendpoint/contacts/1.1">New York</State>
<PostCode xmlns="http://custom.nsendpoint/contacts/1.1">000000</PostCode>
<Country xmlns="http://custom.nsendpoint/contacts/1.1">USA</Country>
</Address>
<Title>MR</Title>
<FirstName>Foo</FirstName>
<MiddleName>Jebus</MiddleName>
<LastName>Bar</LastName>
</Contact>
私の知る限り、これは名前空間拡張を定義する正しい方法ですが、ドキュメントでSpring JAXP変換を実行しようとすると、次のエラー メッセージが表示されます。
org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
transform
メソッド ロジックを掘り下げると、オブジェクトでtraverse
呼び出されたメソッドで失敗し、次のように表示されます。org.apache.xml.serializer.TreeWalker
Method threw 'org.xml.sax.SAXException' exception
連絡先タイプのxsi:プレフィックスを削除すると、エラー メッセージが消えます。
ここで私が間違っていることを誰かに教えてもらえますか? 私は自分が間違っていることを理解できません。