Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PayloadValidatingInterceptor未为@Endpoint触发?_Java_Validation_Spring Ws - Fatal编程技术网

Java PayloadValidatingInterceptor未为@Endpoint触发?

Java PayloadValidatingInterceptor未为@Endpoint触发?,java,validation,spring-ws,Java,Validation,Spring Ws,我有一个应用程序,我想自动验证接收和发送的消息。我已附加了PayloadValidatingInterceptor,并设置了我希望它使用的模式: @EnableWs @Configuration public class WebServiceConfig extends WsConfigurerAdapter { @Autowired private ApplicationContext ctx; @Bean public ServletRegistration

我有一个应用程序,我想自动验证接收和发送的消息。我已附加了
PayloadValidatingInterceptor
,并设置了我希望它使用的模式:

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
    @Autowired
    private ApplicationContext ctx;

    @Bean
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        // modifies the wsdl to serve the correct locations
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/*");
    }

    @Bean
    protected PayloadValidatingInterceptor getValidatingInterceptor() {
        PayloadValidatingInterceptor validatingInterceptor = new PayloadValidatingInterceptor();
        validatingInterceptor.setSchema(getResource("classpath:CARetriever.xsd"));
        validatingInterceptor.setValidateRequest(true);
        validatingInterceptor.setValidateResponse(true);
        return validatingInterceptor;
    }

    private Resource getResource(String resource) {
        return ctx.getResource(resource);
    }
}
我可以看到拦截器正在加载

2016-01-21 14:22:08 INFO  org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor,164 - Validating using class path resource [CARetriever.xsd]

然而,当我对它抛出一个无效的SOAP消息时,我会得到一个
NullPointerException
,而不是一个验证消息。因此,我的配置或预期都是错误的。有人能指出哪一个吗?

我得到了同样的错误:一个SOAPFault,里面有一个NPE,没有堆栈跟踪。调试时,我注意到PayloadValidatingInterceptor中使用的验证器实例为null,因为setSchema没有初始化它。但是有一个方法setXsdSchema,它会初始化它。因此,我可以使用该方法而不是setSchema来修复NPE,如下所示:

payloadValidatingInterceptor.setXsdSchema(new SimpleXsdSchema(new ClassPathResource("test.xsd")));
对于完整的示例,可以查看以下示例:


希望对您有所帮助。

请分享
NPE
的StackTrace。从另一方面看,我没有看到将
PayloadValidatingInterceptor
添加到端点映射的
addInterceptors(列表拦截器)
实现……我没有得到堆栈跟踪-错误在soap错误响应中返回。至于
addInterceptors
——当我尝试用这种方法添加它时,它不再出现在日志中。这很糟糕。任何故障都是服务器上的问题。您应该调试您的服务,以找出谁在该NPE中有罪。Re<代码>addInterceptors()-我不知道它应该如何工作。。。这是你的应用程序,我们只能推荐和修复一些明显的问题。您的所有其他愿望都取决于您。好吧,我假设这是对请求中的数据进行解组的内容,因为我发送的是一个无效的请求。我可以很容易地向它发送一个无效日期,并生成一个带有解析异常消息的soap错误响应。