1

JAXB を使用して SOAP リクエストをマーシャリングしています。soap:Envelope動作していますが、結果の XML にはタグが含まれていません。また、名前空間はsoap:Envelopeタグ内ではなくルート要素に示されます。standalonexml タグには追加の属性もあります。JAXB のマーシャラーを使用して、以下の 2 番目の XML のような出力を得るにはどうすればよいですか?

現在、マーシャリングされた XML は次のようになります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Customer xmlns:ns="http://www.example.org/beanLevelNamespace">
    <ns:id>201200001</ns:id>
    <ns:name>Name</ns:name>
    <ns:age>18</ns:age>
</Customer>

そして、これが私がどのように見せたいかです:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">   
    <soap:Body xmlns:ns="http://www.example.org/beanLevel1Namespace" xmlns:ns1="http://www.example.org/beanLevel2Namespace">
        <ns:Customer>
            <ns1:id>201200001</ns:id>
            <ns1:name>Name</ns:name>
            <ns1:age>18</ns:age>
        </ns:Customer>
    </soap:Body>
</soap:Envelope>
4

1 に答える 1

1

送信する前に、エンベロープ内にXMLを追加できます。

"<Envelope><Body>" + your_xml + "</Body></Envelope>

名前空間は常に要素レベルで維持してください。エンベロープレベルではありません。要素を見ると、それがどのタイプであるかが明確になるためです。名前空間をどこに保持するかは関係ありません。

マーシャリングされたXMLに問題があります。正しいXMLは次のとおりです。

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace">
    <ns:id>201200001</ns:id>
    <ns:name>Name</ns:name>
    <ns:age>18</ns:age>
</ns:Customer>

繰り返しますが、名前空間宣言をどこに置くかは重要ではありません。

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace">
    <ns:id>201200001</ns:id>
</ns:Customer>

<Customer xmlns="http://www.example.org/beanLevelNamespace">
    <id>201200001</id>
</Customer>

<ns1:Customer xmlns:ns1="http://www.example.org/beanLevelNamespace">
    <ns2:id xmlns:ns2="http://www.example.org/beanLevelNamespace">201200001</ns2:id>
</ns1:Customer>

それらはすべて同じです。

于 2012-07-11T04:24:42.677 に答える