2

因此,为了给您一些背景知识,我正在尝试创建一个将通过 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 框架的知识,所以请轻描淡写:)

4

1 回答 1

0

没有 WSDL 就无法创建客户端 jar 文件(存根)。简单地说,我想您应该知道,WSDL 是围绕任何 Web 服务实现的核心。

在远程服务发布之前,不建议为远程服务创建 WSDL,因为从长远来看它可能不可行。明天如果这个第三方请求的参数发生变化,你愿意为WSDL的相应变化花费精力和时间吗?这将导致大量的维护。

我认为您的基本需求是应该返回一个 SOAPMessage 类型的对象,我想您应该寻找实现超时的方法,以保持您当前的方法完好无损。

于 2012-09-25T19:30:19.563 回答