2010-04-06 68 views
1

我們有一個網絡服務,提供汽車保險報價和一家公司提供保險代理管理系統想爲他們的客戶使用網絡服務,但他們想通過網絡服務原始xml而不是使用wsdl來創建一個端口,服務期望的對象並調用Web方法。此Web服務會接受原始xml和對象嗎?

Web服務已經通過創建一個對象,像這樣

com.insurance.quotesvc.AgencyQuote service = new com.insurance.quotesvc.AgencyQuote(); 
com.insurance.quotesvc.QuotePortType port = service.getQuotePortType(); 
com.insurance.quotesvc.schemas.request.ACORD parameter = null; 

然後創建初始化組成響應中的其他對象的請求對象執行完美無缺。

parameter = factory.createACORD(); 
    parameter.setSignonRq(signOn); 
    parameter.setInsurancesSvcRq(svcRq); 

並將請求發送到Web服務。

com.insurance.quotesvc.schemas.response.ACORD result = null; 
    result = port.requestQuote(parameter); 

通過這樣做,我能夠輕鬆地將請求和結果放入xml文件中,並按照我的意願進行操作。 因此,如果客戶端要通過http post發送web服務作爲soap信封內的raw xml。 Web服務是否能夠在不對Web服務進行任何更改的情況下處理xml,還是需要對Web服務進行更改才能處理該類型的請求?

Web服務是JAX_WS,我們目前同時使用上述方法使用Web服務的Java和C#客戶端,但是現在有另一個客戶端想要在soap信封內發送原始xml,而不是創建對象。我很確定他們將使用vb調用Web服務。

我敢肯定,我錯過了一些明顯的東西,但它目前正在躲避我,任何幫助都非常感謝。

回答

0

我想你需要單獨的URL來處理這種情況。你仍然會像你在做的那樣映射你的WSDL和它的端點。但是,您需要配置第二個單獨的URL,該URL將有一個servlet接受來自HTTP POST的編碼XML流並單獨處理。

+0

此答案最能幫助我找到解決問題的方法。我將創建另一個接受原始xml的Web服務,並使用jaxb將xml解組爲一個對象,然後我可以將它傳遞給當前的Web服務。這應該減少所需的額外工作。感謝大家的答案。 – ChadNC 2010-04-08 14:24:56

0

從理論上講,應該可以手動構建與傳統WS客戶端創建的XML無法區分的XML。

實際上,在所有邊緣案例中糾正這種情況可能相當困難。如果他們(向您的服務發送原始XML的客戶)弄錯了,他們可能會遇到大量難以理解的錯誤......您可能需要幫助他們診斷這些錯誤。

在最糟糕的情況下,格式錯誤的消息可能會影響系統的性能。但人們希望WS中間件層和您的應用程序能夠抵禦畸形請求的影響。

簡而言之,@ duffymo創建第二個API的方法對您而言風險較小,但成本對您而言更具前期性。但最簡單的方法就是說「不!」。

0

應該沒有問題,因爲您的wsdltojava和wsdltocsharp只會在幕後爲您做。只要他們遵循WSDL制定的合同。

但是這樣做很多工作都是手動的,完全沒有必要,因爲還有一個wsdltovb的東西應該對他們更加容易。當你改變你身邊的某些東西時,他們必須重新做一遍。

他們只是重新發明輪子。