1

我尝试为我的第一次体验构建 wsdl 客户jre5JAX-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 的一部分从服务器返回的内容。如果异常包含错误消息,那么我们可以编写如下所示的内容。注意:错误代码将是处理此问题的最佳方法。

    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);
           }
           ......
       }            

另一种方法是使用错误代码和错误消息从服务器抛出自定义 SOAP 异常,并在代码中处理它

于 2013-02-06T07:05:08.003 回答