Java 如何正确捕获ClientTransportException

Java 如何正确捕获ClientTransportException,java,web-services,soap,Java,Web Services,Soap,我有一个用JAX-WS编写的SOAP客户机。 我的代码是这样的: UpdateSub port = service.getUpdateSub(); port.soapMethod(parameter); 我想为SOAP服务器的连接被拒绝或超时的情况提供特定的代码。 我测试了这些案例,发现soapMethod抛出了ClientTransportException。 ClientTransportException来自sun软件包,因此如果为了捕获它而导入它,编译器会抛出以下错误: 包com.su

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

UpdateSub port = service.getUpdateSub();
port.soapMethod(parameter);
我想为SOAP服务器的连接被拒绝或超时的情况提供特定的代码。 我测试了这些案例,发现soapMethod抛出了ClientTransportException。 ClientTransportException来自sun软件包,因此如果为了捕获它而导入它,编译器会抛出以下错误:

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

我按照卡玛卡泽的建议解决了这个问题

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

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

我已经研究了如何处理SOAP1.2错误,因为服务器用HTTP 401状态代码回答了无效的身份验证。根据这种说法,答案是完全正确的


主要故障来自防止400和500以外的状态代码被处理为SOAP错误,导致ClientTransportException,我认为它应该只在有效负载缺少非支持状态代码时被抛出,我指的是在标准表17中列出的以外的代码。见相关的和

你好。我仍然没有找到用JAX-WS处理401或403响应代码的简单方法。。。我想在webservice凭据无效时提供一个专用异常。仍然在搜索JDK中SOAP1.2客户端的默认实现实际上无法处理服务器发送未经授权的消息?尽管这是一个完全正确的回答?这似乎太疯狂了!对,这也让我疯狂。。。这个答案非常古老,并且链接随着项目的移动而断开,所以我邀请您与最新的Java运行时HttpTransportPipe::checkStatusCode方法进行比较,但我猜401HTTP错误处理方面没有任何变化。