• ベストアンサー

axis SOAP

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

  • Java
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • axis パラメータ

    apache + tomcat + axis で Webサービス(Javaクラス) を使っています。 Webサービス(Javaクラス)にサーバのパラメータを渡すことは可能でしょうか? クライアントからWebサービス(Javaクラス)に引数を渡す方法ではなく、 サーバ(axis)のWeb.xmlなどに記述する方法を探しています。 (起動するサービスごとにパラメータを分けたい) よろしくお願い致します。

    • ベストアンサー
    • Java
  • Apache Axis でWebサービス

    タイトルの通り現在AxisでWebサービスを作る勉強をしています。 そこで、Webサービス側のクラスのフィールドで宣言した変数がクライアント側で呼び出したときに保持されない現象が起きています。 例えば、 (Webサービス側) public class Test{ private int x; public Test(){ x = 10; } public void setX(int x){ this.x = x; } public int getX(){ return x; } } (クライアント側) public class Client{ public static void main(String[] args){ Test t = new Test(); t.setX(20); System.out.println(t.getX()); } } これのクライアント側を動かすと普通なら「20」が返ってくると思うのですが、初期値の「10」が返ってきてしまいます。 これはWebサービス一般的なことではなくて自分のPCの環境の問題のような気がするのですが、解決策が見当たらなくて困っています。 アドバイスを頂けましたら幸いです。 開発環境 OS:WindowsXP home Java:J2SE 1.4.2_10 Tomcat:5.0 Axis:1.3

    • ベストアンサー
    • Java
  • AXIS2の初期処理

    Apache AXIS2(Tomcat + AXIS2 1.3)のサービスクラスで初期処理をする方法を探しています。 イメージとしてはStrutsのプラグインのように、WEBアプリケーションの起動時のみ呼び出されるような処理です。 宜しくお願い致します。

  • axis SOAP Fault

    お世話になります。 perlクライアントから、axisサーブレット(javaクラス)の呼出を行っています。 サーブレットであるエラーが発生したときに、例外を投げているのですが、 perlクライアント側でその例外をキャッチすることができません。 ▼perlクライアント --------------------------------------------- my $service = SOAP::Lite -> uri('http://xxx/axis/services/TestService') -> proxy('http://xxx/axis/services/TestService?wsdl'); $a = $service->Test( 0, 0 ); unless ( $a->fault ) { print "Success\n"; # Exceptionが発生してもSuccessになる。 } else { print "Error\n"; } ▼javaサーブレットクラス ------------------------------------- public class Test( int a, int b ) { : if ( a==0 || b==0 ) { throw Exception( "testException" ); } : 目的としては、サーブレットクラスの例外を取れればいいのですが、 根本的にやり方が間違っている場合もご指摘いただけると助かります。

  • はじめまして。「拡張されたHTTPステータスコード」をWindows版

    はじめまして。「拡張されたHTTPステータスコード」をWindows版のApacheで 返却する方法をご教授下さい。 [経緯] 現在とあるWEBサービスを使用するためのPHPクライアントを作成しております。 PHPクライアントはHTTP経由のGETでパラメータを送り サーバ側もHTTPでクライアントへ結果を返却します。 その結果を元にクライアント側で処理を行います。 但し、サーバ側の結果は「拡張された」HTTPステータスコードで返却されます。 ※「拡張された」HTTPステータスコードは「0」「30」「-3000~-3012」など サーバ側の環境が無いため、現在モックを作成してクライアントの 挙動確認を行おうと考えております。が、モック作成が上手くいかないのです。 モック(PHPモジュール)からRFCに定義されていないHTTPステータスコードを 返却すると、Apacheが500のInternal Server Errorを返却してしまいます。 尚、Windows版のApacheでは上記のような動作となるのですが Linux版のApacheでは、指定したHTTPステータスコードが返却されます。 どなたかWindows版のApacheで、「拡張されたHTTPステータスコード」を 返却する方法をご存知では無いでしょうか? [環境]  サーバOS:Windows Vista Home Premium  WEBサーバ:Apache2.0(Windows版インストーラ使用)  CGI:PHP5.2.12(Windows版Zipを使用) [構図]   (WEBサービス)     ↑|   GET|| HTTPステータスコード     |↓  (PHPクライアント) [サーバ側モジュール例] <?php header('HTTP/1.1 3000 Precondition Failed'); ?> 以上、よろしくお願い致します。

    • 締切済み
    • PHP
  • SOAP::Lite axis 例外処理

    お世話になります。 perlクライアントから、SOAP::Liteモジュールを使い、 axisに登録されたjavaサーブレットクラスを呼び出しています。 (例) $s = SOAP::Lite->service( 'http://xxx.wsdl' ); #サービス名 $s->test(); #javaサーブレットクラス呼び出し javaサーブレットクラスが例外(Exception)で終了した場合、 perlクライアントで例外をキャッチする方法はありますでしょうか? #以下のコードではエラーはキャッチできませんでした。 eval { $s->test(); }; if ($@) { # エラー処理 }; * 通常処理はうまくうごいています。 例外は意図的にExceptionをthrowしています。java内ではキャッチして終了してます。

  • Tomcat & Axisの設定

    @ITや豆蔵のサイトを見て、Apache Tomcat1.4とAXIS1.0を使ったWebアプリケーションにトライしてみようと思っているのですが、以下のようなエラーが出てしまいます。 (AXIS付属のサンプルを実行した結果です) C:\xml-axis-10>java samples.userguide.example3.Client HELLO Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletContext 違うサンプルも試してみたのですが、同じエラーが出ました。何らかの設定の間違いだと思うのですが、何が間違っているのかわかりません。どのように直せばよろしいのでしょうか?よろしくお願いします。 OS:WinME 環境変数 axis_home : c:\xml-axis-10 java_home : C:\j2sdk1.4.0_01 classpath : .;C:\xml-axis-10\lib\axis.jar;C:\xml-axis-10\lib\axis-ant.jar;C:\xml-axis-10\lib\commons-discovery.jar;C:\xml-axis-10\lib\commons-logging.jar;C:\xml-axis-10\lib\jaxrpc.jar;C:\xml-axis-10\lib\log4j-1.2.4.jar;C:\xml-axis-10\lib\saaj.jar;C:\xml-axis-10\lib\wsdl4j.jar;C:\xml-axis-10\lib\xerces.jar

    • ベストアンサー
    • Java
  • ■SOAPを使ったwebアプリケーションについて質問です

    ■SOAPを使ったwebアプリケーションについて質問です 現在、SOAPを利用したJavaでのクライアントーサーバ間のwebアプリケーションを作成しようとしています。 やりたいことは下記の通りです。 1、クライアント側でSOAP本体を自前で作成し、それをサーバプログラムに送信する。 2、サーバで受け取ったSOAPメッセージを解析し、応答メッセージを作成する。 3、作成した応答メッセージをクライアントへ返す。 使用する環境は Java 1.6 Apache 2,2 Tomcat 6.0 Axis2(不要なら使わない予定) です。 上記のアプリケーションを作成するには具体的にどのようなソースになるか ネット上でも調べてみたのですが見つからず困っております。 有識者の方、どうかご教授願いますでしょうか。

  • AxisServer

    いま、SOAPに勉強をしています。 クライアントAからSOAPメッセージを サーバ(tomcat + axis)に送り処理をさせて クライアントA自身に返すことはできました。 そこで今やりたいのはクライアントAからサーバで処理をさせ、 違うクライアント(クライアントBとします)にメッセージを送りたいのですが、 この場合、サーバのプログラムはどうしたらいいのでしょうか? returnで返すとクライアントAに戻ってきますよね? となると、サーバでもクライアントAと同じような処理をさせるのでしょうか? そうだとすると、call.setTargetEndpointAddressの中身のURLはクライアントBのIPアドレスとして、 invokeで送信したとします。 そうすると、クライントBはどのようにそのメッセージをうけとるのでしょうか? (後、サービスの場所はどうなる?) Documentをみたら org.apache.axis.server.AxisServer というのがあったのですが、 これを使ったらいいのかな?と思うのですが、 使いからがわかりません・・・ ちなみに、クライアントBにはtomcatは入っていません。 どうかよろしくお願いします。

  • HTTPリクエスト

    JSPのクライアントからサーブレットにHTTPリクエストを送信する部分について、質問させていただきたく思います。 [実現したいこと] ・クライアント側からのHTTPリクエストのヘッダの内容を、任意のものに書き換えてサーブレットに送信。 [環境] WEB APサーバー:Web Sphere Aprication Server HTTPヘッダを読み取って、ヘッダ内のクライアント情報を元にクライアント別の処理を振り分ける機能を作ったのですが、そこの機能をテストするのに上の機能を使いたいと思ってます。。。 皆様のお知恵を拝借できればと思います。 よろしくお願いいたします。

専門家に質問してみよう