2013-07-18 250 views
3

我需要將XML Soap請求發送到服務器上的URL。我寫了類似於在Spring MVC中以XML的形式獲取SOAP請求

@RequestMapping("/SomeService") 
@ResponseBody 
public String index(@RequestBody String request) { 
    mailService.sendMail("[email protected]", "Subject", request); 
    return ""; 
} 

但請求主體是空白的。我使用的是spring 3.2。我只需要XML SOAP內容。我如何在這種情況下繼續。提前致謝。

+0

你可以發佈你的彈簧配置xml嗎? – Phani

回答

-1

在您的bean定義文件中添加以下bean定義。我的bean定義具有bean前綴。

<beans:bean name="handlerAdapter" 
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <beans:property name="messageConverters"> 
     <util:list> 
      <beans:bean 
       class="org.springframework.http.converter.StringHttpMessageConverter" /> 
     </util:list> 
    </beans:property> 
</beans:bean> 
+0

下一步?這將轉換傳入的請求。 –

+0

您將以String形式獲得完整的SOAP請求。使用SAAJ庫解析字符串並將其作爲SOAPMessage獲取,否則編寫自己的SOAPHTTPMessageConverter以基於內容類型執行任務。 –

0

請嘗試以下代碼。我認爲你必須將這個方法定義爲POST。並定義標題。它將支持將此定義爲GET,但在服務器端它不會識別@RequestBody中的Body內容。

@RequestMapping(value = "/SomeService", method = RequestMethod.POST, headers = "Accept=application/xml, application/json") 
    @ResponseBody 
    public String index(@RequestBody String request) { 
     mailService.sendMail("[email protected]", "Subject", request); 
     return ""; 
    } 
2

讓我提出這樣@Akhil的幾種方法:如果要公開一個強大的基於SOAP的端點

  1. ,那麼最好的辦法是使用全的一個(比如Apache CXF或Axis2)。

  2. 如果你想要更輕量一點,想完全置身於項目的Spring傘下,我強烈建議使用Spring-WS作爲端點來使用SOAP請求並提供響應 - Spring WS爲herehttp://static.springsource.org/spring-ws/sites/2.0/reference/html/index.html

  3. 如果這是一個特設的端點您正在使用不實際的商業原因,但說只是爲了獲取信息,並不真正關心的其他功能,SOAP帶來的 - 比如說安全性,有效性等,編組,解組支持等,然後一個選項是使用Spring的HttpRequestHandlingServlet,這樣你可以實現一個HttpRequestHandler,它將HttpServletRequest作爲參數,並獲取P從它OST的內容。

這些你可能已經注意到是Spring MVC中的所有外,其原因是框架趨於消耗原始的HTTP請求,並提供了參數,一旦預先處理他們,所以即使你寫了一個期待原始字符串的@RequestMapped方法,你不會乾淨利落。

+0

謝謝。這意味着,因爲我有幾個Spring MVC控制器,我將無法實現這一點,或者我可以只用於一個控制器。 –