【问题标题】:Java SOAP Request as a Web Service?Java SOAP 请求作为 Web 服务?
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多