Java SOAP请求作为Web服务?

时间:2012-05-03 17:17:07

标签: java web-services soap saaj

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

我认为AXIS确实有超时但已被警告试图避免,并且它的表现不是很好。我的高层似乎把这作为最后的修复。

有人建议javax.xml.ws Web Service路由可以很好地工作,因为只有当它是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);

更像Web服务,所以我可以这样做:

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

myService.callMyRemoteMethodWith(myParameter1, myparameter2);

我真的对javax.ws框架缺乏了解,所以请轻描淡写:)

1 个答案:

答案 0 :(得分:0)

如果没有WSDL,则无法创建客户端jar文件(存根)。简单地说,我认为你知道这一点,WSDL是围绕任何Web服务实现的核心。

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

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