2013-03-18 27 views
1

因此,我正在爲已存在的應用程序編寫一個Spring Web服務來與之通話。我有服務工作到它將接收請求並回應它的地方,但事情是,應用程序期望響應是普通舊XML(POX)。我的回答是目前連接到它,像這樣的SOAP頭:使用Plain Old XML(POX)創建Spring Web服務

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <Person> 
      <FirstName>John</FirstName> 
      <LastName>Smith</LastName> 
     </Person> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

我需要什麼返回是這樣的:

<Person> 
    <FirstName>John</FirstName> 
    <LastName>Smith</LastName> 
</Person> 

從我發現,春天是做這個的非常多能幹我認爲它與DomPoxMessageFactory有關,但我發現的所有例子都使用Spring WS的舊版本,比如v1.5。即使是Spring發行版中的POX樣本也是在3年前編寫的。謝謝你的幫助!

編輯:我也使用spring-ws v2.1.2。到目前爲止我的代碼非常相似,你會發現這裏是什麼:http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html

回答

0

您可以實現一個EndpointInterceptorAdapter和改變響應重寫用handleResponse:

@Override 
public boolean handleResponse(MessageContext messageContext_, Object endpoint_) 
throws IOException { 

WebServiceMessage _webServiceMessage = messageContext_.getResponse(); 
SoapMessage _soapMessage = (SoapMessage) _webServiceMessage; 
// modify the content 

我不知道什麼延長你可以修改迴應。

0

對於我來說,我需要的是這樣的在基於Java的配置:

@Bean(name = "messageFactory") 
public WebServiceMessageFactory messageFactory() { 
    return new DomPoxMessageFactory(); 
} 

這意味着MessageDispatcherServlet將切換到POX,而不是默認的SOAP。

如果您使用基於XML的配置,這應該這樣做:

<bean id="messageFactory" class="org.springframework.ws.pox.dom.DomPoxMessageFactory" /> 

comment通過@ loshad-vtapkah:

如果在請求中指定的命名空間這種修改只能.XML。 對於您提供的鏈接中指定的情況,名稱空間被省略。 因此,您需要爲CountryEndpount(檢查 PayloadRoot註釋)設置空名稱空間,或者擴展 DomPoxMessage.createWebServiceMessage()方法以更新文檔 節點名稱空間。

+0

只有在request.xml中指定名稱空間時,此修改纔有效。對於您提供的鏈接中指定的情況,命名空間被省略。因此,您需要爲CountryEndpount(檢查PayloadRoot批註)設置空名稱空間,或者擴展DomPoxMessage.createWebServiceMessage()方法以更新文檔節點名稱空間。 – 2016-10-20 19:19:34

+0

@loshadvtapkah謝謝你的評論!除非你想自己添加它作爲答案,否則我會將其添加到我的答案中? – eis 2016-10-21 08:12:17

+0

請做。我沒有看到添加相同但更新的答案的理由。如果你需要,我可以提供一個工作代碼。 – 2016-10-22 10:23:38