如何告诉 SchemaValidation fatal 和 errors 没问题并且仍然获得验证错误的详细信息?
How to tell SchemaValidation fatal and errors are ok and still get details of validation errors?
我有一个 @Webservice
需要 XSD 输入验证。
我的 WSDL XSD.
中需要 PingInput
的 inputTime
和 userInput
我用 @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>
我有一个 @Webservice
需要 XSD 输入验证。
我的 WSDL XSD.
PingInput
的 inputTime
和 userInput
我用 @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>