我有一个@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);
}
答案 0 :(得分:0)
我花了半天多的时间试图让它发挥作用,所以我发布了一个答案。我希望它可以帮助别人。
似乎与我的应用程序服务器捆绑在一起的JavaWS就是问题所在。
在我的WAR中包含以下依赖项之后,它就像一个魅力。 以前我将其标记为已提供。
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
version>2.2.10</version>
</dependency>