2015-05-19 52 views
1

我有一個基於SOAP的端點,它接收一個XML消息,驗證它並用其他XML回覆。對於xml處理,我使用JAXB。 我的終點是這樣的:JAX-WS @webMethod手動反序列化

@WebMethod 
public SomeOutput processXML(SomeInput input){ 
    ... 
} 

Deserealization正確執行,如果XML是有效的。但是如果客戶端發送另一個結構,我會得到一個豁免。如何在自動反序列化之前接收原始XML並通過xsd模式驗證它?

+0

我發現了一個更好的方式,使用String作爲參數,並接收數據作爲xml字符串,並使用JAXB將數據解組爲Java對象。 – romanvintonyak

回答

1

在JAX-WS中,您可以使用處理程序來處理故障。如果在解組處理程序中發生錯誤,用戶添加的錯誤可能會在需要時處理錯誤。

http://docs.oracle.com/javaee/5/api/javax/xml/ws/handler/Handler.html

如果你想獲得的原始XML消息作爲您的Web服務,而不是讓JAX-WS照顧,對你的輸入(它給你更多的控制,而且更多的工作),你可以做什麼他們在這個網站上描述:http://java.dzone.com/articles/implementing-jax-ws-web

+0

是的,但如果沒有錯誤,則umarshaling會發生兩次。這不是一個好的做法。 – romanvintonyak

+0

我不明白。爲什麼消息會被解組兩次? – Juru

+0

在處理程序中,當我手動嘗試解組輸入並且輸入有效時,自動反序列化(解組)在@WebMethod中發生public SomeOutput processXML(SomeInput input){..}。我對嗎? – romanvintonyak