2013-05-31 187 views
7

我是春季Web服務的新手,在編寫階乘服務的示例程序後,我留下了一些疑惑。我認爲這是春天的Web服務是如何工作的:春季Web服務流程


應用程序運行在服務器上,併產生一個請求 - >請求轉到 調度的servlet在web.xml中定義 - >調度servlet查找 對於[servlet的名稱] -servlet.xml後綴 - >調度的servlet然後查找 payloadroot其中找到正確的端點 - >的XML請求轉到 終點 - >響應由端點產生


現在我的疑惑是:

  1. 那如何來端點請求到達XML形式?我知道XSD有助於創建xml,但是它何時做到這一點?
  2. 在這整個過程中什麼時候構建了wsdl?

以下是bean定義即:[servlet-name]-servlet.xml文件:

<beans ...> 
    <bean id="findFactorialService" class="springws.findFactorial.FindFactorialServiceImpl"/> 

    <bean id="findFactorialServiceEndpoint" class="springws.findFactorial.endpoint.FindFactorialServiceEndpoint"> 
     <property name="findFactorialService" ref="findFactorialService" /> 
    </bean> 

    <bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"> 
      <property name="defaultEndpoint" ref="findFactorialServiceEndpoint" /> 
     </bean> 

     <bean id="findFactorialSchema" class="org.springframework.xml.xsd.SimpleXsdSchema"> 
      <property name="xsd" value="/WEB-INF/findFactorialService.xsd" /> 
     </bean> 

     <bean id="findFactorial" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition"> 
      <property name="schema" ref="findFactorialSchema" /> 
      <property name="portTypeName" value="hello" /> 
      <property name="locationUri" value="http://localhost:7070/find-factorial-using-contractfirst/services" /> 
     </bean> 
    </beans> 

回答

4
  1. 的XSD不生成XML,它用於驗證它。人們也在寫客戶端來了解如何形成他們的XML以發送給您的服務。 「請求」是某種類型的客戶端向您的服務發送的消息 - 它通常通過http協議(萬維網協議)進入您的服務。

  2. 你提到在你的代碼,這意味着是契約優先 - 這意味着(儘管通常這是連同描述接口XSD做),你應該在你做任何事情之前寫的WSDL 。然後,可以使用wsdl和一些註釋來配置Spring,以便處理消息 - 甚至可以使用jaxb直接將代碼自動綁定到代碼中的java對象中,以便您不必手動分析傳入的xml有效內容。

This is old,但它遵循您使用的相同方法,甚至使用相同的不推薦使用的彈簧類。

現在很多開發人員都採用WS- *風格的Web服務來支持基於REST的Web服務,這些Web服務通過使用spring-web和spring-mvc很容易實現,並且在java上有一些簡單的註釋POJO。如果你願意的話,甚至可以讓spring自動將你的xml載荷綁定到從xsd生成的java對象上,這樣你就不必在任何時候實際處理XML。

0
  1. 彈簧使用JAXB序列化到xml和從請求解析。
  2. 如果您使用的是JAX-WS,則WSDL將在運行時生成(默認情況下),但也可以提供預生成的WSDL

爲了解決您的評論:如果你看一看spring-ws-core Maven依賴

,你會發現,它有spring-oxm依賴(基於XML <的抽象 - >對象映射),其中有一個依賴於jaxb-api項目。

仔細研究一下您在依賴關係中實際使用的內容。 JAXB可能來自應用程序服務器庫/文件夾。

第二點。 JAXB不僅用於序列化爲xml,還可以從xml反序列化。

+0

第一件事:我沒有使用任何JAXB服務或罐子..第二件事:JAXB使用java類轉換爲xml ..但請求僅以xml的形式到達終端..不在對象的形式。 – Chandeep

+0

更新了答案 – WeMakeSoftware