2015-12-07 37 views
1

我有一個@Webservice需要對輸入進行XSD驗證。 我的WSDL XSD中都需要inputTimeuserInputPingInput如何判斷SchemaValidation致命錯誤是否正常,仍然可以獲取驗證錯誤的詳細信息?

我裝飾我的web服務與@SchemaValidation與自定義SchemaValidationErrorHandler如下。

因爲我的SchemaValidationErrorHandler方法只做了packet.invocationProperties.put並且不會引發異常,所以我期望在調用ping時仍然應該進入我的ping方法。

我需要做什麼來啓用此行爲?

的Webservice:

@WebService 
@Stateless 
@SchemaValidation(handler = SchemaValidationErrorHandler.class) 
class MyWebservice { 
    public PingResponse ping(PingInput input) throws PingFault{ 
    //never gets here when there is a XSD error 
    Object errorException = messageContext.get(SchemaValidationErrorHandler.ERROR); 
... 
    } 
} 

SchemaValidationErrorHandler:

import org.xml.sax.SAXParseException; 
import com.sun.xml.ws.developer.ValidationErrorHandler; 
public class SchemaValidationErrorHandler extends ValidationErrorHandler { 

    public static final String WARNING = "Warning"; 
    public static final String ERROR = "Error"; 
    public static final String FATAL_ERROR = "Fatal"; 

    public void warning(SAXParseException exception) { 
    packet.invocationProperties.put(WARNING, exception); 
    } 

    public void error(SAXParseException exception) { 
    packet.invocationProperties.put(ERROR, exception); 
    } 

    public void fatalError(SAXParseException exception) { 
    packet.invocationProperties.put(FATAL_ERROR, exception); 
    } 

輸入:

class PingInput { 
    long inputTime;//required 
    String userInput;//required 
} 
+0

似乎這涉及到我正在使用的jaxws-rt。 2.2.10就像魅力一樣 – rjdkolb

回答

0

我花了超過半天的時間試圖讓這個工作,所以我發佈了一個答案。我希望它能幫助別人。

看來與我的應用程序服務器捆綁在一起的JavaWS是個問題。

在我的WAR中包含下面的依賴關係之後,它就像魅力一樣工作。 以前我標記爲提供。

<dependency> 
    <groupId>com.sun.xml.ws</groupId> 
    <artifactId>jaxws-rt</artifactId> 
    version>2.2.10</version> 
</dependency> 
相關問題