【发布时间】:2012-05-13 06:10:51
【问题描述】:
因此,为了给您一些背景知识,我正在尝试创建一个将通过 SOAP 与第三方交互的客户端。最初我开始使用 javax.xml.soap SAAJ 推出它,但后来意识到在创建 SOAPConnection 时没有超时选项。
我认为 AXIS 确实有超时,但已被警告尝试避免,这在性能方面并不是很好。我的上级似乎将此作为最后的恢复。
有些人建议 javax.xml.ws Web 服务路由效果很好,因为您可以将超时设置放入上下文属性中,前提是它是一个 Web 服务。
所以情况就是这样,我发送请求的第三方并没有真正的 WSDL 文件或 URL,最初的想法是构建 SOAP 请求并发送它,如果 SAAJ 会很好用有超时设置。
所以我在思考并原谅我的无知,我是否可以像 Web 服务一样建模和实现通信,而不是构建请求的 SAAJ javax.xml.soap 方法?如果是这样,任何人都可以真正指出我吗?我发现的大多数文档似乎都依赖于从 WSDL 生成存根和类。
这完全是为了设置与此第三方 SOAP API 的连接的超时设置。
另外请注意,我看到有些人建议尝试将其视为可以设置超时的 HttpConnection,但我发现它的缺点是它不再返回 SOAPMessage 类型的对象。
所以基本上我正在尝试改变这一点:
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
SOAPHeader soapHeader = soapEnvelope.getHeader();
SOAPBody soapBody = soapEnvelope.getBody();
....
soapConnection.call(soapMessage, url);
进入更像网络服务的东西,所以我可以这样做:
requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 2000);
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 2000);
myService.callMyRemoteMethodWith(myParameter1, myparameter2);
我真的对 javax.ws 框架缺乏了解,所以请轻描淡写:)
【问题讨论】:
-
考虑为远程服务创建一个 WSDL?然后可以使用很多工具。
-
+1 我建议使用 JAX-WS + JAXB 注释生成 WSDL。
-
这可能是一个选项,为我无法控制的第三方生成 WSDL 可能看起来有点奇怪,但这是一个选项。
-
Java 的系统属性呢?即 sun.net.client.defaultConnectTimeout,它们是否受到 SOAPConnection 的尊重?
-
我认为为第 3 方服务创建 WSDL 并不奇怪。该服务有一个接口,第 3 方显然没有选择记录。以 WSDL 形式记录接口的文档是一种主动的方法(与预期的一样多),可以使接口形式化,从而为工具生成机制提供一些可咀嚼的东西。此外,它将帮助您识别将来界面是否发生变化。 stackoverflow.com/questions/2148915/… 的帖子提供了有关设置超时的一些细节。
标签: java web-services soap saaj