java - Spring WS : How to get and save XSD validat

我将 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 生成的错误响应,所以我永远没有机会处理它们。但我希望能够记录完整的错误消息并将其保存到数据库。我发现的一种方法是在我的另一个问题中做这样的事情;

Spring WS How to get all error messages when validation fails

但它并没有按我的意愿工作。

最佳答案

你可以扩展PayloadValidationInterceptor并重新定义方法

protected boolean handleRequestValidationErrors(MessageContext messageContext, SAXParseException[] errors)

如果您查看标准实现(可用 here ),您会看到它是如何转储所有解析错误的;您还可以转储传入的消息,因为您可以访问 messageContext 及其 getRequest() 方法。你的类(class)应该是这样的

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

}

关于java - Spring WS : How to get and save XSD validation errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666479/

相关文章:

java - 使用 Spring JavaConfig 和 @Autowired 注入(inject

java - 如何使用spring websocket向自定义用户发送自定义消息?

java - 在 Spring Hibernate java 项目中使用 "Envers"审计表

spring - Spring Boot 2 中的 EmbeddedServletContainer

java - spring mvc 表单 :select tag

spring - java.lang.ClassNotFoundException : org. a

spring - 如何在 apache 基准测试工具中限制每秒请求

spring - java 9模块从A和B读取包X

java - Spring Security 3 - 总是返回错误 302

java - Spring MVC : Resolving the view based on Us