如何告诉 SchemaValidation fatal 和 errors 没问题并且仍然获得验证错误的详细信息?

How to tell SchemaValidation fatal and errors are ok and still get details of validation errors?

我有一个 @Webservice 需要 XSD 输入验证。 我的 WSDL XSD.

中需要 PingInputinputTimeuserInput

我用 @SchemaValidation 和自定义 SchemaValidationErrorHandler 装饰我的网络服务,如下所示。

因为我下面的 SchemaValidationErrorHandler 方法只做一个 packet.invocationProperties.put 而没有抛出异常,我希望在调用 ping 时,它应该仍然进入我的 ping 方法。

我需要做什么才能启用此行为?

网络服务:

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

输入:

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

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

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

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

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