Java SOAP请求作为Web服务?

Java SOAP请求作为Web服务?,java,web-services,soap,saaj,Java,Web Services,Soap,Saaj,因此,为了给您一些背景知识,我正在尝试创建一个通过SOAP与第三方交互的客户机。起初,我开始使用javax.xml.soapsaaj来实现这一点,但后来意识到在创建SOAPConnection时没有超时选项 我考虑过AXIS,它确实有超时,但已经被警告要尽量避免,而且它的性能不是很好。我的上级似乎把这当作最后的恢复 有人建议javax.xml.ws Web服务路由非常有效,因为只有当它是Web服务时,才可以在上下文属性中设置超时设置 现在的情况是,我发送请求的第三方并没有真正的WSDL文件或UR

因此,为了给您一些背景知识,我正在尝试创建一个通过SOAP与第三方交互的客户机。起初,我开始使用javax.xml.soapsaaj来实现这一点,但后来意识到在创建SOAPConnection时没有超时选项

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

有人建议javax.xml.ws Web服务路由非常有效,因为只有当它是Web服务时,才可以在上下文属性中设置超时设置

现在的情况是,我发送请求的第三方并没有真正的WSDL文件或URL,最初的想法是建立SOAP请求并发送它,如果SAAJ有超时设置,它会工作得很好

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

这一切实际上都是为了为连接到这个第三方soapapi设置超时设置

另外请注意,我看到一些人建议尝试将其视为可以设置超时的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);
进入更像web服务的领域,这样我就可以做到:

requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 2000); 
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 2000);

myService.callMyRemoteMethodWith(myParameter1, myparameter2);
我确实缺乏关于javax.ws框架的知识,所以请轻描淡写:)

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

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

我认为您的基本需求是应该返回SOAPMessage类型的对象,我想您应该考虑如何实现超时,保持当前方法的完整性。

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

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


我认为您的基本需求是应该返回SOAPMessage类型的对象,我想您应该考虑如何实现超时,保持当前方法的完整性。

是否考虑为远程服务创建WSDL?然后有很多工具可用。+1,我建议使用JAX-WS+JAXB注释生成WSDL。这可能是一个选项,可能看起来有点奇怪,为我无法控制的第三方生成WSDL,但这是一个选项。Java的系统属性呢?即Sun.NET.clit.Debug连接超时,它们是否受SOAPCONTION的尊重?我不认为为第三方服务创建WSDL是奇怪的。该服务有一个第三方显然没有选择记录的接口。您以WSDL的形式对接口进行文档记录是一种主动的方法(尽可能多地)来形式化接口,从而为工具生成机制提供一些可供研究的内容。此外,它还将帮助您识别接口将来是否会更改。上的帖子提供了设置超时的一些细节。是否考虑为远程服务创建WSDL?然后有很多工具可用。+1,我建议使用JAX-WS+JAXB注释生成WSDL。这可能是一个选项,可能看起来有点奇怪,为我无法控制的第三方生成WSDL,但这是一个选项。Java的系统属性呢?即Sun.NET.clit.Debug连接超时,它们是否受SOAPCONTION的尊重?我不认为为第三方服务创建WSDL是奇怪的。该服务有一个第三方显然没有选择记录的接口。您以WSDL的形式对接口进行文档记录是一种主动的方法(尽可能多地)来形式化接口,从而为工具生成机制提供一些可供研究的内容。此外,它还将帮助您识别接口将来是否会更改。上的文章提供了设置超时的一些细节。