• ベストアンサー

axis SOAP

Tomcat + axis の Webサービスにおいて、 クライアントからの入力に対し、 Webサービス側でなんらかの処理を行い、 結果のデータを返しています。 このとき、入力が不正な値だった場合に、 返却時のHTTPコードに 50x InputError などの 任意のHTTPコードを返したいのですが、可能でしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • thamansa
  • ベストアンサー率40% (95/232)
回答No.2

あまりSOAPに詳しくはないのですが、私の知っている範囲で考えると、 もともとのSOAPの仕組みとしては、任意のデータを任意のプロトコルで転送する仕組みですから、質問のケースではHTTPプロトコルとしては通信に成功しているためHTTPのエラーコードを使うのはふさわしくないと考えられます。 SOAPには、データの論理エラーやサービスの実行時エラーの場合に例外を返す仕組みがありますが、それで代用は出来ないのでしょうか。 axisの実装としても、アプリケーション側からHTTPのエラーコードを制御できるようにはしていないでしょうから、希望通りにHTTPコードを返すのは、難しいと思います。 どうしてもHTTPエラーコードにする必要があるのなら、完全に憶測ですが、tomcatみたいに、axisにもプラグインとかフィルタとかの仕組みがあるでしょうから、そのあたりをいじれば可能かもしれません。 もし大嘘ついていたらごめんなさい。 知らないなら答えるなって感じですが、少しでもヒントになればと。

mozori01
質問者

お礼

確かに、その通りかもしれないですね。 SOAPを投げる側がもともとHTTPを制御していたモジュールなので、 HTTPでエラーを管理すると楽かなと思ったのですが、 axisにHTTP制御ができないとなると、無理にやる必要性が無さそうですね。 検討してみます。ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

>SOAPで入力を受け取ったとき、HttpServletResponseインスタンスを受け取りません。 なるほど。そうなんですか。 では、こういうのはどうでしょうか? (1)Axisサーブレットを継承してカスタムサーブレットを作成する  よくわかってないからあれですが、  http://ws.apache.org/axis/java/apiDocs/index.html  をぱっと見たところ、   org.apache.axis.transport.http.AxisServlet  これを継承するの・・・かな? (2)このサーブレットから、HttpServletResponseをstaticに保存しておく (3)エラーの箇所でsetStatus実行する 相当トリッキーですまぬ(^-^;

mozori01
質問者

お礼

ご回答ありがとうございます。 カスタムサーブレットを作成ですか。 見た感じ、できればうまくいきそうですね! ただやはり、大規模&トリッキーになりがちなので、 ちょっと別の方法を検討してみます! ありがとうございました。

すると、全ての回答が全文表示されます。
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

すみません。SOAPが良くわからないのですが、 SOAPだと、 HttpServletResponse#setStatus(int ) とか HttpServletResponse#sndError(int, String ) は使えないということでしょうか?

mozori01
質問者

補足

SOAPで入力を受け取ったとき、HttpServletResponseインスタンスを受け取りません。 そのため、setStatusでコードを設定する事ができません。 ============================================ Webサービスクラスは以下のような感じです。 /** *WebServiceのsサービス *入力が0なら1が返る *入力が0以外ならHTTP505などのコードが返る */ public class WebService { public int s( int n ) { if ( n==0 ) { // 何もしないとHTTPコード200が返るようです。 return 1; } else { // HTTPコード505などでエラーを返したい。 return -1; } } }

すると、全ての回答が全文表示されます。

関連するQ&A