微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring WS:如何获取和保存XSD验证错误

如何解决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 举报,一经查实,本站将立刻删除。