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



我们使用的web服务会引发3种类型的自定义web服务故障,即ServiceException、ConnectionException和InvalidDataException。

除了这些捕获块,我们还放入了RemoteAccessException的捕获块,RemoteAccessException是spring的运行时异常。

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

在测试上面列出的自定义异常时,我们发现所有这3种类型的异常都没有在各自的捕获块中被捕获。相反,所有内容都会在最后一个捕获块中捕获,该块是RemoteAccessException。我们在调试soap fault的异常对象时发现,该异常对象的类型为org.springframework.remoting.jaxws.JaxWsSoapFaultException,该服务正在抛出正确的错误。

我担心的是,为什么这些断层没有落入自己的陷阱。服务本身告诉我们在进行服务调用时处理这些异常。

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

我们使用的是spring-2.5.6.jar.

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

在每个catch块中检查故障对象是否为null,这样当抛出故障时,它就不会在任何其他catch块上被覆盖。这是因为您在catch块的每个条目处都进行了not null检查。

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

最新更新