SOAP エンベロープがすでに削除されている場合にのみ、JAXB は XML を非整列化できます。ただし、アンマーシャリングしようとしている SOAP 応答には、soap エンベロープに名前空間宣言があります。soap エンベロープを削除すると、名前空間宣言も削除されます。そのため、タグのプレフィックスは none を参照します。これにより、JAXB はエラーをスローします。名前空間が SOAP エンベロープで宣言されている場合、JAXB を使用して SOAP 応答を非整列化するにはどうすればよいですか?
非整列化する必要がある XML の同様のサンプルを以下に示します。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://example.com/">
<soapenv:Body>
<ns:getNumberResponse>
<number>123456789</number>
</ns:getNumberResponse>
</soapenv:Body>
</soapenv:Envelope>
石鹸の封筒を外すとこうなります。
<ns:getNumberResponse>
<number>123456789</number>
</ns:getNumberResponse>
soap エンベロープを削除すると、名前空間宣言も削除されます。プレフィックス「ns」の名前空間定義が欠落しているため、JAXB は上記の xml を非整列化できません。そのため、"The prefix "ns" for element "ns:getNumberResponse" is not bound."
エラー メッセージが返されます。どうすれば修正できますか?
JDK 1.5 を使用していることに注意してください。JDK 1.6 でこれを解決する方法があるかどうかはわかりません。JAXB を使用するために必要な jar をダウンロードしたので、JAXB を使用することができました。