1

jre5初めての体験でwsdlクライアントを構築しようとしてJAX-WS RI 2.1.3います。私はwsdl2javaツールからクラスを生成しcxf、クライアントの周りにラッパークラスを書きました:

public class RequestHelper {
    private DataLoadService service = new DataLoadService();
    private DataLoadServiceSoap client;
    private static String token;

    //....my constructor....

    public void sendData(data){
     try{
       if (tokenIsExpired()){
          renewToken();
       }
       client.sendData(data, this.token);
      }catch(SOAPFaultException e){
           //...work with e
      }
    }
}

メソッドで例外を処理する方法がわかりませんsendData
たとえば、HTTP では、status codesステータス コードを読み取って、サーバーから取得したエラーの種類とその処理方法を決定できます。
私の場合、トークンの有効期限に問題があります。sendDataリクエストが長時間サーバーに送信されることがあります。そして、リクエストがすでにサーバー上にある場合、トークンは有効ではなくなり、「トークンの有効期限が切れました」というテキストメッセージで例外が発生します。そして、このタイプの例外を個別にキャッチしたい、次のようなもの:

public class RequestHelper {
private DataLoadService service = new DataLoadService();
private DataLoadServiceSoap client;
private static String token;

//....my constructor....

    public void sendData(data){
     try{
         if (tokenIsExpired()){
            renewToken();
         }
         client.sendData(data, this.token);
       }catch(SOAPFaultException e){
       //...work with e
       }catch(TokenExpiredException e){
         renewToken();
         client.sendData(data, this.token);
       }
    }
}

JAX-WS RI 2.1.3ライブラリでこれを達成するにはどうすればよいですか?

更新:

} catch (SOAPFaultException e) {
 SOAPFault f = e.getFault();
 f.getFaultString() //yes here we have error description with "Token"
                    //but with locals dependency, this is not safe handle exception by this value
 f.getFaultCode() //here simply string "soap:Receiver", do not know how i can recognize only "token exceptions"
}
4

1 に答える 1

1

サーバーから SOAPFaultException の一部として何が返されたかを調べます。Exception にエラー メッセージが含まれている場合は、以下のように記述できます。注: エラー コードは、これを処理するための最良の方法です。

    try{
         if (tokenIsExpired()){
            renewToken();
         }
         client.sendData(data, this.token);
       }catch(SOAPFaultException e){
           if(e.getFault().getFaultString().equalsIgnoreCase("Token expired") ) {
               renewToken();
               client.sendData(data, this.token);
           }
           ......
       }            

もう 1 つの方法は、カスタム SOAP 例外をサーバーからエラー コードとエラー メッセージと共にスローし、それをコードで処理することです。

于 2013-02-06T07:05:08.003 に答える