gpt4 book ai didi

Java SOAP 请求作为 Web 服务?

转载 作者:行者123 更新时间:2023-11-29 09:14:19 25 4
gpt4 key购买 nike

因此,为了给您一些背景知识,我正在尝试创建一个将通过 SOAP 与第三方交互的客户端。最初我开始使用 javax.xml.soap SAAJ 来推出它,但后来意识到在创建 SOAPConnection 时没有超时选项。

我考虑过 AXIS,它确实有超时,但已被警告要尽量避免,而且它的性能不是很好。我的上级似乎将此作为最后的恢复。

有些人建议 javax.xml.ws Web 服务路由非常有用,因为您可以将超时设置放入上下文属性中,前提是它是一个 Web 服务。

情况是这样的,我向其发送请求的第三方实际上没有 WSDL 文件或 URL,最初的想法是构建 SOAP 请求并发送它,如果 SAAJ 会很好用有超时设置。

所以我在想并原谅我的无知,我是否可以像 Web 服务一样建模和实现通信,而不是构建请求的 SAAJ javax.xml.soap 方法?如果是这样,有人真的可以指出我吗?我发现的大多数文档似乎都依赖于从 WSDL 生成 stub 和类。

这实际上是为了设置连接到此第三方 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,则无法创建客户端 jar 文件( stub )。简而言之,我想您会知道这一点,WSDL 是所有 Web 服务实现的核心。

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

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

关于Java SOAP 请求作为 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com