• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SOAPの引数、返値をXMLで記述したい)

SOAPの引数、返値をXMLで記述する方法とは?

このQ&Aのポイント
  • SOAP over HTTPを使ったクライアントサーバ間のインターフェース構築を求められています。クライアントからのリクエスト、サーバからのレスポンスは、XMLで記述する必要がありますが、通常の文字列では正しく送受信できません。
  • 具体的には、jax-wsを利用してサーバにエコーメソッドを公開しました。クライアントはXML形式でリクエストを送信し、期待する返値もXML形式です。
  • SOAPオブジェクトの引数、返値にはテキストデータではなく、エスケープされたXMLデータを使用する必要があります。XMLデータを引数、返値で使用する場合、別途ファイルを作成してURLを送信したり、添付ファイルにする方法が考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ウェブサービスのオペレーションのstring型の引数にXMLを与えたい場合に適切なエスケープが必要になるのは「こういう仕様」だと思います。 ただ、クライアント側で StreamSource を使って要求メッセージを作る場合はエスケープ処理を自分で行う必要がありますが、そこを JAXBElement を使うように変えればエスケープ処理はJAXBライブラリが自動的に行ってくれるようになります。 なので、StreamSource にこだわらなくてよいのなら JAXBElement を使うのがいいと思います。

prophetok
質問者

お礼

kenichiiceさん 回答ありがとうございました。 JAXBElement を利用しなかった理由は、クライアントの構築は他社の担当であり、開発環境がJAVA以外の可能性もあったからです。 本日改めてJAX-WSの機能をいろいろと試してみたのですが、XMLドキュメントとオブジェクトのマーシャリング、アンマーシャリングを自動的に行ってくれるようなので、文字列ではなく自分で定義したクラスに変更して試してみました。 //引数、返値受け渡し用クラス public class Book {  public String name;  public int order;  public int price; } //StringをBookに変更 @WebService public class Hello { @WebMethod Book String perchase( Book order ) throws Exception { order.price = 1000 * order.order; return order; } } 下記のリクエストに対して <arg0><name>book</name><order>3</order></arg0> 期待通り下記のレスポンスが返ってくることを確認しました。 <return><name>book</name><order>3</order><price>3000</price></return> JAX-WSすごいですね。 先週初めて知りました。これで、なんとかなりそうです。 ありがとうございました。

関連するQ&A