如何解决Spring WS:如何获取和保存XSD验证错误
您可以扩展PayloadValidationInterceptor
和重新定义方法
protected boolean handleRequestValidationErrors(MessageContext messageContext, SAXParseException[] errors)
如果看一下标准实现(在此处可用),您会看到它如何转储所有解析错误。您还可以转储传入的消息,因为您可以访问messageContext及其getRequest()方法。你的课应该是这样的
public class PayloadValidationgInterceptorCustom extends
PayloadValidatingInterceptor {
@Override
protected boolean handleRequestValidationErrors(MessageContext messageContext, SAXParseException[] errors)
throws TransformerException {
messageContext.getRequest().writeto(/*place your Outputstream here something like a ByteArrayOutputStream*/); //use this if you want to dump the message
for (SAXParseException error : errors) {
//dump the each error on the db o collect the stack traces in a single string and dump only one or to the database
/*you can use something like this
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
error.printstacktrace(pw);
sw.toString();
to get the stack trace
*/
}
return super.handleRequestValidationErrors(messageContext,errors);
}
解决方法
我将SpringWS用于我的肥皂服务,并以此进行验证。
<sws:interceptors>
<bean id="payloadValidatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
<property name="schema" value="/schemas/my.xsd"/>
<property name="validateRequest" value="false"/>
<property name="validateResponse" value="true"/>
</bean>
@PayloadRoot(namespace = NAMESPACE,localPart = "ServiceProvider")
@ResponsePayload
public ServiceProviderTxn getAccountDetails(@RequestPayload ServiceProviderrequest)
{ ...}
这可以正常工作,但是当出现错误时,它会在到达终点之前返回spring产生的错误响应,所以我再也没有机会处理它们。但是我希望能够
记录并将完整的错误消息保存到数据库 。我发现的一种方法是在另一个问题中做类似的事情。
但这并没有我想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。