繁体   English   中英

在JAX-WS中处理异常自定义

[英]Handling Exception custom in JAX-WS

我有使用JAX-WS开发的Web服务。 现在,我想在某些情况下使用自定义错误代码抛出SOAPFault。

我有一个网络故障:

@WebFault(name = "BankExceptionFault1_Fault", targetNamespace = NS.namespace)

公共类BankException扩展了Exception {

private WebMethodStatus faultInfo;


public BankException(Errors error) {
    this(error, error.name());
}

public WebMethodStatus getFaultInfo() {
    return faultInfo;
}

public BankException(Errors error, String description) {
    super(error.getErrorCode());
    this.faultInfo = new WebMethodStatus(error, description);
}

}

在某些方法中,对于给定条件,将引发异常:

@Override
@WebMethod(operationName = "UpdateAccountRecord")
@WebResult(name = "Result")
@LogExecution
public WebMethodStatus updateAccountRecord(
        @WebParam(name = "Request") UpdateAccountRequest request) throws BankException {
    if (!Boolean.parseBoolean(specialMode)) {
        throw new BankException(Errors.INVALID_RUNNING_MODE,
                "Can't update account record. For updating need special running mode");
    }
    service.updateAccountRecord(request);
    return new WebMethodSuccessStatus();
}

在spring-mvc应用程序中,我想捕获我的异常:

try {
        wsPort.updateAccountRecord(updateAccountRequest);
    } catch (BankException e) {
        throwException(e);
    }
    catch(RemoteAccessException e){
        throwException(e);
    }

但是,如果尝试使用sring-mvc应用程序更新帐户,则始终返回RemoteAccessException。 detailMessage:无法访问位于[http:// localhost:8080 / my-app-2.1.1-SNAPSHOT / app / MyApp]的远程服务,原因:java.lang.IllegalStateException:当前事件不是START_ELEMENT或END_ELEMENT

但是,如果我使用soapui作为更新帐户,则返回正确的异常:

BNK00017无法更新帐户记录。 进行更新需要特殊的运行模式

如果wsPort类似于注入的JaxWsPortProxyFactoryBean ,则您的异常很可能被RemoteAccessException包装。 尝试使用RemoteAccessException.getCause()并查看得到的内容...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM