如何正确捕获ClientTransportException

时间:2016-03-10 12:57:18

标签: java web-services soap

我有一个用JAX-WS编写的SOAP客户端。 我的代码是这样的:

UpdateSub port = service.getUpdateSub();
port.soapMethod(parameter);

我希望在拒绝与SOAP服务器的连接或超时的情况下获得特定的代码。 我测试了这些情况,我发现soapMethod会抛出ClientTransportException。 ClientTransportException来自sun包,所以如果我导入它以捕获它,编译器会抛出此错误:

  

包com.sun.xml.internal.ws.client不存在

我以karmakaze建议的方式解决了这个问题here

据我所知,这只是一种解决方法,Oracle并不建议这样做。 那么,在没有编译器参数的情况下捕获这种异常的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

从我的观点来看,ClientTransportException并非设计为被捕获,而是应该使用WebServiceException,但是HTTP状态代码不再可用。

我已经研究了如何处理SOAP 1.2 Fault,以便由具有HTTP 401状态代码的服务器应答的无效认证。根据{{​​3}},这样的答案是完全有效的。

主要问题来自SOAP 1.2 Adjuncts,它阻止将400和500以外的状态代码作为SOAP Fault处理,导致ClientTransportException,我认为只应在缺少不受支持的状态代码的有效负载时抛出它,我指的是除标准表17中列出的代码之外的其他代码。请参阅相关的HttpTransportPipe::checkStatusCodecommit comments