如何判断SchemaValidation致命和错误是否正常,仍然可以获得验证错误的详细信息?

时间:2015-12-07 10:25:54

标签: java-ee xsd java-8 jax-ws xsd-validation

我有一个@Webservice,需要对输入进行XSD验证。 我的WSDL XSD中都需要inputTime的{​​{1}}和userInput

我使用PingInput使用@SchemaValidation装饰我的网络服务,如下所示。

由于我的SchemaValidationErrorHandler方法仅执行SchemaValidationErrorHandler并且不会抛出异常,我希望在调用ping时,它仍然应该输入我的ping方法。

启用此行为需要执行哪些操作?

网络服务:

packet.invocationProperties.put

SchemaValidationErrorHandler:

@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);  
...
  }
} 

输入:

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);  
  } 

1 个答案:

答案 0 :(得分:0)

我花了半天多的时间试图让它发挥作用,所以我发布了一个答案。我希望它可以帮助别人。

似乎与我的应用程序服务器捆绑在一起的JavaWS就是问题所在。

在我的WAR中包含以下依赖项之后,它就像一个魅力。 以前我将其标记为已提供。

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