2012-05-03 160 views
2

所以爲了給你一些背景知識,我試圖創建一個客戶端,它將通過SOAP與第三方進行交互。最初,我開始使用javax.xml.soap SAAJ進行推出,但後來認識到在創建SOAPConnection時沒有超時選項。作爲Web服務的Java SOAP請求?

我認爲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); 

到的東西更像是Web服務,以便我能做到這一點:

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

myService.callMyRemoteMethodWith(myParameter1, myparameter2); 

我真的很缺乏有關知識javax.ws框架,所以請輕輕一點:)

+3

考慮爲遠程服務創建WSDL?然後有很多工具可用。 –

+0

+1我建議使用JAX-WS + JAXB註釋生成WSDL。 – Puce

+0

這可能是一個選項,可能看起來有點奇怪,爲我的控制生成第三方的WSDL,但這是一個選項。 –

回答

0

無法在沒有WSDL的情況下創建客戶端jar文件(存根)。簡而言之,我想你會知道這一點,WSDL是任何Web服務實現的核心。

在遠程服務發佈它之前,不建議爲遠程服務創建WSDL,只是因爲它從長遠來看可能不可行。明天,如果第三方請求的參數發生變化,您是否願意花費精力和時間來處理WSDL中的相應更改?這將導致大量的維護。

我認爲你的基本需求是應該返回一個SOAPMessage類型對象,我想你應該看看如何實現超時保持你的當前方法不變。