2011-08-03 13 views
3

奇妙な問題があります。私は2つのWebアプリケーションを持っています。 Jerseyを使用して公開した残りのWebサービス用のもの。もう一つはJSFフロントエンドの実装で、Webサービスの上に詳細を取得するよう呼びます。 Tomcatをコンテナとして使用しています。WebapplicationExceptionを1つのWebアプリケーションからスローし、UniformInterfaceExceptionを他に取得する

私が直面しています問題は、私は残りのWebサービスを呼び出すときに、私はこの

catch (CustomExceptions e) { 
    ResponseBuilder response = new ResponseBuilderImpl(); 
    response.status(500); 
    response.entity(e.getStackTrace()); 
    throw new WebApplicationException(e, response.build()); 
} 

ようWebApplicationExceptionを投げるとFE Webアプリケーション上の他の一方で、私は次の操作を行います:

try { 
    r.get(MyClass.class); 
    return "SUCCESS"; 
} catch (WebApplicationException wae) { 
    return "FAILURE"; 
} catch (UniformInterfaceException wae) { 
    return "FAILURE"; 
} 

ここでキャッチブロックで私はWebApplicationExceptionを期待していましたが、UniformInterfaceExceptionが奇妙です。また、UniformInterfaceExceptionをスローすると、スタックトレースが維持されません。私は休息から渡された応答さえ失われます。誰かが私の手助けをして、残りの呼び出しから元のスタックトレースを取得する方法はありますか?

ありがとうございます。

答えて

0

私は前に同じ問題がありました。ジャージーWebResource.getメソッドは、WebApplicationExcpetionの継承階層にないUniformInterfaceExceptionだけをスローするからだと思います。私がしたのは、ジャージーのクライアントサイドAPIを放棄して、プレーンであるApacheHttpClientを使用することです。 httpResponseの内容に適切なスタックトレースを取得できるようになります。

これが役に立ちます。


ありがとう、ライアン。私はあなたの解決策を試しました。非常に素晴らしい。

5

user guideapi documentationに指定されているように、UniformInterfaceExceptionは、特定のエンティティをタイプ別に取得しようとしたが、200シリーズ以外の応答を受け取ろうとすると予想される結果です。 WebApplicationExceptionは、例外でカスタム応答を埋め込むためのサーバー側での便利な例外です。

"lost"はありません。ここでHTTPリクエストを行っていることに注意してください。

try { 
    r.get(MyClass.class); 
} catch (UniformInterfaceException e) { 
    ClientResponse response = e.getResponse(); 
    // do whatever with the raw response 
} 
を:あなたは、ステータスコードとレスポンスを自分で調べ

ClientResponse response = r.get(ClientResponse.class); 
if (response.getStatus() == <expected status code>) [ 
    response.getEntity(MyClass.class); 
    // do happy path stuff 
} else { 
    // bad stuff here 
} 

代わりを使用し、すべてがうまく行く、とだけ例外の応答をチェックすると仮定します

関連する問題