2013-10-10 3 views
5

タイトルのとおりです。JAX-WS webserviceを特定のhttpコードで応答させる方法

@WebService(
     targetNamespace = "http://com.lalaland.TestWs", 
     portName = "TestWs", 
     serviceName = "TestWs") 
public class TestWs implements TestWsInterface { 

    @EJB(name="validator") 
    private ValidatorLocal validator; 

    @WebMethod(operationName = "getStuff") 
    public List<StuffItem> getStuff(@WebParam(name = "aaa")String aaa, 
         @WebParam(name = "bbb")int bbb) { 

      if (! validator.check1(...)) 
       return HTTP code 403  <------------ Here 
      if (! validator.check2(...)) 
       return HTTP code 404  <------------ Here 
      if (! validator.check3(...)) 
       return HTTP code 499  <------------ Here 

      return good list of Stuff Items 

    } 

必要に応じて特定のHTTPコードを返すようにすることはできますか?私は、認証、内部サーバーエラーなどのいくつかのものが、WSメソッドが500と認証エラーを返すようにしていることを知っていますが、ビジネスロジックに従ってこれらを送信できるようにしたいと思います。

誰でもこれを前に実行しましたか? jax-WSをしばらく使用していましたが、これが必要だったのは初めてでした。それを探してみたところ、どこでも答えは見つかりませんでした。

おかげ

+0

ただ、完全酒のために、私はすでに試した:新しいjavax.xml.ws.http.HTTPException(123)を投げると、それはあなたがどちらを使用している – SysHex

+0

を動作しませんでした:地下鉄またはcxf? – Sergio

+0

@ChechusこれはGlassfish 3に配備されているので、メトロはこのことを忘れてglassfish-3タグ – SysHex

答えて

9

のみjavax.servlet.http.HttpServletResponseの現在のインスタンスを取得し、エラーを送信します。

@WebService 
public class Test { 

    private static final Logger LOG = Logger.getLogger(Test.class.getName()); 

    @Resource 
    private WebServiceContext context; 

    @WebMethod(operationName = "testCode") 
    public String testCode(@WebParam(name = "code") int code) { 
     if (code < 200 || code > 299) { 
      try { 
       MessageContext ctx = context.getMessageContext(); 
       HttpServletResponse response = (HttpServletResponse) 
         ctx.get(MessageContext.SERVLET_RESPONSE); 
       response.sendError(code, code + " You want it!"); 
      } catch (IOException e) { 
       LOG.severe("Never happens, or yes?"); 
      } 
     } 
     return code + " Everything is fine!"; 
    } 

} 

も参照List of HTTP status codes - Wikipedia, the free encyclopedia

+0

これは機能します!ありがとうポール – SysHex

+1

あなたは大歓迎です。答えがあなたの質問を満足に解決するならば、あなたはそれを受け入れることができることを忘れないでください(http://meta.stackexchange.com/a/5235/227183)。 –

2

このお試しください:http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-server-side/インタフェースを実装する:

はこのようSoapHandlerを作成します)(Handler.handleResponseを。あなたが望むようHTTP_RESPONSE_CODE:あなたが使用することができますhttp://download.java.net/jdk7/archive/b123/docs/api/javax/xml/ws/handler/MessageContext.html

、その後、ハンドラ内であなたがHTTPヘッダを好きなようにあなたのような何かを追加することができますので、変更することがつきます。

その他のリソース:http://docs.oracle.com/cd/E14571_01/web.1111/e13735/handlers.htm

ヒント:SOAPメッセージのインターセプタとしてsoaphandlersに考える

+0

をテストしました。 ** Handler.handleResponse(); **によって**または** 2分で – SysHex

+0

をお知らせしますhandleMessage()を意味しますか? handleResponseの署名が見つかりません。 – SysHex

+1

オラクルのチュートリアルでそれを行う方法がわかりますが、実際にはPaulレスポンスはかなりきれいです.HTTPレスポンスコードを変更するだけでよい場合は試してみてください。 – Sergio

関連する問題