无法在自己的catch块中捕获Web服务的自定义异常

时间:2012-08-19 20:19:33

标签: java soap pojo custom-exceptions

我们正在使用一种Web服务,它会抛出3种类型的自定义Web服务错误,即ServiceException,ConnectionException和InvalidDataException。

除了这些catch块之外,我们还为RemoteAccessException放入了catch块,这是spring的运行时异常。

catch (org.springframework.remoting.RemoteAccessException remoteAccessExc) {
}

在测试上面列出的自定义异常时,我们发现所有这三种类型的异常都没有被捕获到它们各自的catch块中。相反,所有都被捕获在最后一个catch块中,即RemoteAccessException。我们在调试期间发现了soap故障的异常对象,它是org.springframework.remoting.jaxws.JaxWsSoapFaultException类型,该服务正在抛出正确的错误。

我担心的是为什么这些错误不会落入他们自己的陷阱。服务本身告诉我们在发出服务呼叫时处理这些异常。

当我通过代理java客户端命中服务时,故障会正确地落入各自的块中。如果POJO出现问题,那么他们也不应该在这种情况下工作。但他们正在这种情况下工作(当通过java代理客户端命中时),这意味着POJO没有问题。

我们正在使用spring-2.5.6.jar。

1 个答案:

答案 0 :(得分:0)

由于您要保留不同的catch块并且故障对象被覆盖,请执行以下操作:

检查每个catch块中的错误对象是否为null,以便在抛出错误时,不会在任何其他catch块中覆盖它。这是因为你在catch块的每个条目都放了非空检查。

try{
    //////
}Catch(IllegalArgumentException e){
    create fault object;
    throw fault;    
}
Catch(Exception e){
    ///check whether fault object is not null

    if(fault!=null){
    throw fault;
}else{
    ///another fault object 
    throw fault1;
}