2011-01-31 19 views
1

現在、EJB3ベースのSOAP Webサービスを開発していますが、未調査の例外を処理してクライアントに適切なSOAP応答を返すベストプラクティスは何か疑問です。ejb 3ベースのSOAPサービスで例外を処理する方法

例:

@WebMethod 
public SomeResponse processSomeService(
     @WebParam(name = "someParameters") SomeParameters someParameters) 
{ 
    // the EJB do something with the parameters 
    // and retrieve a response fot the client 
    SomeResponse theResponse = this.doSomething(someParameters); 

    return theResponse; 
} 

は、私は次のように汎用的な例外をキャッチする必要があります:

@WebMethod 
public SomeResponse processSomeService(
     @WebParam(name = "someParameters") SomeParameters someParameters) 
{ 
    // the EJB do something with the parameters 
    // and retrieve a response to return to the client 
    try 
    { 
     SomeResponse theResponse = this.doSomething(someParameters); 
    } 
    catch (Exception ex) 
    { 
     // log the exception 
     logger.log(Level.SEVERE, "something is going wrong {0}", ex.getMessage()); 
     // get a generic error response not to let the 
     // technical reason going to the client 
     SomeResponse theResponse = SomeResponse.createError(); 
    } 

    return theResponse; 
} 

これを達成するために、「ベストプラクティス」のいくつかの種類がありますか?

ありがとう

答えて

1

エラーの場合にSOAPメッセージを返すには、そのメッセージを作成する必要があります。私はコンテナがあなたが必要とするものを知っているとは思わないでしょう。

あなたのデザインは適切だと思います。私が持っている一つの批判は、あなたがエラーの性質について特定できないということです。

+0

アイデアは、 "server overload"のようなメッセージで、実際のエラーがクライアントを通過することはありません。 –

+0

@Alexandre:エラーコードをクライアントに返すことで、実際のエラーの意味を隠すことができます。これは、後で問題を解決するのに役立ちます。 – Qwerky

+0

私は最終的に汎用例外をキャッチし、例外の種類に応じてエラーコードを追加します。提案していただきありがとうございます。 –

0

ejb-containerがこれを処理する必要はありません。 EJB 3.1仕様から

、章14.2.2例外処理アレクサンドルGUIDETでコメント#1に関する

UPDATEが - >システム例外:

  • は、Beanメソッドが発生した場合 システム例外またはエラーの場合、 は、 beanメソッドからのエラーをコンテナに伝播するだけです(つまり、 )beanメソッドは 例外をキャッチします)。

  • Beanメソッドは、Beanメソッドが が回復できないことを確認 例外もたらす 動作を行う場合、Beanメソッドは に元の例外をラップするjavax.ejb.EJBExceptionをスローするべきです。

  • が にjavax.ejb.EJBExceptionを使って報告しなければならないその他の予期しないエラー条件。だから、コンテナへのRuntimeExceptionを伝播

EJB仕様が推奨する方法です。

+0

残念ながら、いくつかの例外はejb-containerによってキャッチされず、SOAP応答を介してクライアントに返されます。 –

+0

@Alexandre:はい、もちろんです。これがコンテナの処理で、実行時例外がSOAPFaultとして返されます。 –

+0

@Alexandre公平になるように、私は0に投票をリセットしました。あなたの質問は特にejb 3.0 Webサービスに関するものではありませんが、一般的なWebサービス開発のベストプラクティスについては... – CMR

2

SOAPは応答のエラーを返すことをお勧めしません。SOAPはエラーの処理を処理するためのSOAPフォールトを定義します。 Michael Konietzkaが指摘したように、コンテナはスローされた例外を処理してSOAPフォールトに変換できます。

あなたのケースでは、最初に例外をキャッチしてログに記録したいと思われます。元の例外をラップする新しいEJBExceptionをスローします。

関連する問題