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错误响应。