本文系轉載!!!
位址:http://blog.csdn.net/kkdelta/article/details/4017747
本文簡單介紹JAX WS在伺服器端是如何實作和運作的。
下面這幅圖描述了一個SOAP binding的JAX WS從接受到用戶端的請求到傳回請求給用戶端的過程。
1,用戶端開發者通過URL得到WSDL檔案。(通過HTTP通路可以得到,http://?wsdl)
2,用戶端根據WSDL的描述,通過HTTP POST發送SOAP消息給伺服器端。
3, 伺服器端Listener接受到SOAP請求消息,對JAVA來說,通常是一個servlet或者EJB。Listener把消息轉發給 Dispatcher,有時候listener和Dispatcher也可能是同一個類。Dispatcher會把請求消息交給WebService的運作終端。
4,這時候,伺服器端會将HTTP request轉成伺服器端的消息類型,形成javax.xml.ws.handler.MessageContext,并處理SOAP消息的頭資訊,如mustUnderstand。
5,如果在伺服器端配置了handler,會調用handler的handleMessage方法,通常用handler來儲存消息,解密或者保證消息到達的順序。handler通過在@HandlerChain标注配置,
handlers.xml檔案内容為:
http://java.sun.com/xml/ns/javaee">
WSSOAPHandler
com.cxf.test.WSSOAPHandler
WSHandler
com.cxf.test.WSHandler
6,SOAP消息被反序列化為JAVA對象,傳到真正的實作業務的類。
7,調用真正的業務方法,執行後利用JAXB注解序列化成SOAP傳回消息。
8,如果配置了handler,會調用handler的handleMessage方法。如果業務方法有異常抛出,把異常轉為SOAP fault 消息。
9,Listener通過HTTP把response傳回給用戶端。
總體來講:整個過程是一個Requset XML(SOAP)-->JAXB-->JAVA Object-->JAXB-->Response XML(SOAP)的過程.