我有使用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 app中,我想抓住我的例外:
try {
wsPort.updateAccountRecord(updateAccountRequest);
} catch (BankException e) {
throwException(e);
}
catch(RemoteAccessException e){
throwException(e);
}
但是如果尝试使用sring-mvc app更新帐户,则总是返回RemoteAccessException。 detailMessage:无法访问[http:// localhost:8080 / my-app-2.1.1-SNAPSHOT / app / MyApp]中的远程服务 cause:java.lang.IllegalStateException:当前事件不是START_ELEMENT或END_ELEMENT
但是如果我使用soapui作为更新帐户,则返回正确的异常:
BNK00017 无法更新帐户记录。更新需要特殊的运行模式
答案 0 :(得分:1)
如果wsPort
类似于注入JaxWsPortProxyFactoryBean
,那么您的异常很可能被RemoteAccessException
包裹。尝试使用RemoteAccessException.getCause()
,看看你得到了什么......