我使用 jax ws 准备了一个 Spring Web 服务。它工作正常,我可以从许多其他项目中调用此服务。
有趣的事情发生在另一个项目中。我尝试再次使用此客户端(通过添加源和仅使用 jar 的类来尝试)。当我在服务上调用 get 端点端口方法时(在我可以调用 Web 服务上的实际方法之前),它静默失败,没有迹象表明向服务发出请求,也没有捕获到异常。只有我的控制器上有一个 finally 子句,它会进行一些计算并退出(并打印日志)。
为什么此失败不会生成一般异常?如何以其他方式跟踪错误?或者一般来说,我做错了什么?
用法:
logger.debug("web service: " + transferService.toString());
logger.debug("web service qname: " + transferService.getServiceName());
logger.debug("web service url: " + transferService.getWSDLDocumentLocation());
//logger.debug("web service endpoint: " + transferService.getTransferEndPointPort().toString());
QueryCardNumberWithIdWSResponse response =
transferService.getTransferEndPointPort().queryId(request);
transferService 对象正常运行,直到我们调用 getTransferEndPointPort。然后它崩溃了。
getTransferEndPoint 实现:
@WebEndpoint(name = "TransferEndPointPort")
public TransferEndPoint getTransferEndPointPort() {
loggerApache.debug("getting transfer end point ");
loggerApache.debug("service name: " + super.getServiceName() );
return super.getPort(new QName("http://www.blabla.com", "TransferEndPointPort"), TransferEndPoint.class);
}
它打印日志,但在 super.getPort 之后没有任何反应,只是控制器中的 finally 块起作用。
编辑:过了一会儿,我记得在 catch 子句中使用 Throwable。所以我最终从服务中抓住了一个可扔的东西。
它是 :
java error java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String;
在网上搜索后,我得出结论,由于 java 版本,我不应该在我的 Web 服务中使用 WebFault。我从 web 方法中删除了 throws 异常(可能我在早期阶段忘记删除它),现在它似乎正在工作。