SAAJでの名前空間プレフィックスの操作/ SAAJ内のraw xmlアクセス
-
05-07-2019 - |
質問
SAAJベースのクライアントは次のXMLを生成し、それを.NET Webサービスに送信します。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<AuthenticationHeader xmlns="http://www.w3.org/2001/XMLSchema-instance">
<Password xmlns="http://schemas.datacontract.org/2004/07/">temp123</Password>
<UserName xmlns="http://schemas.datacontract.org/2004/07/">temp321</UserName>
</AuthenticationHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<GetTracks xmlns="http://tempuri.org/">
<TrackName>baby</TrackName><ArtistID>0</ArtistID><AlbumID>0</AlbumID><Start>0</Start><Count> 20</Count>
</GetTracks></SOAP-ENV:Body></SOAP-ENV:Envelope>
私が経験している問題は、AuthenticationHeader要素にはプレフィックスを定義する必要がありますが、先頭に追加しないことです。これは、Webサービスからエラーを取得しないために生成する必要があるものです。
<AuthenticationHeader xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
名前の作成中にプレフィックスを生成する場合、xmlns属性の後と要素の最初に自動的に追加されます。
javax.xml.soapパッケージ全体をいじくり回そうとしましたが、これを回避するのに役立つものを見つけることができませんでした。このようなxmlを生成するためにどの方向に進むべきかについてのヒントを教えていただけますか?
補足的に、これは、このような有効なxmlを拒否するWebサービスにとっても有効な動作であるのだろうか?そのような解釈行動の動機は何ですか?
ありがとう!
解決
Java SOAP APIは通常、通信先のサービスから仕様に準拠していることを前提としているため、細かなプレフィックス制御などはAPIを介して公開されません。気にする必要はありません。
このような以前のケースでは、SOAP DOMオブジェクトの手動構築に頼らざるを得なかったことがありますが、これはひどく痛みを伴います。
最近では、 Spring WebServices 私が望んでいるものを正確に作り出す。 SAAJ APIを抽象化し、XMLレベルでDOMを理解するためのフックを提供します。試してみて、何を思い付くことができるかを確認することをお勧めします。
所属していません StackOverflow