1

私のSAAJベースのクライアントは、次のXMLを生成し、それを.NETWebサービスに送信します。

<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を生成するために進むべき方向についてのヒントを教えてください。

ちなみに、これはWebサービスがこのような有効なxmlを拒否するための有効な動作でさえあるのだろうか?そのような解釈行動の動機は何ですか?

ありがとうございました!

4

1 に答える 1

1

Java SOAP APIは通常、通信先のサービスからの仕様への準拠を前提としているため、気にする必要がないため、きめ細かいプレフィックス制御などはAPIを介して公開されません。

このような以前のケースでは、SOAP DOMオブジェクトを手動で作成する必要がありましたが、これは非常に苦痛です。

最近では、SpringWebServicesで自分が求めているものを正確に作成できるようになりました。これはSAAJAPIを抽象化しますが、XMLレベルでDOMを停止してダーティにするためのフックを提供します。試してみて、何ができるか見てみることをお勧めします。

于 2009-10-21T14:58:43.100 に答える