2016-01-21 2 views
2

У меня есть приложение, которое я хотел бы автоматически проверять сообщения, которые были получены и отправлены. Я приложил PayloadValidatingInterceptor и установить схему, я хотел бы его использовать:PayloadValidatingInterceptor не стреляет для @Endpoint?

@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, а не подтверждение. Таким образом, моя конфигурация или ожидания ошибочны. Может кто-нибудь указать на что?

+0

Пожалуйста, делите StackTrace для этого 'NPE'. С другой стороны, я не вижу 'addInterceptors (List перехватчики)' реализация для добавления вашего 'PayloadValidatingInterceptor' к сопоставлению конечных точек ... –

+0

Я не получаю stacktrace - ошибка возвращается в ответ на ошибку мыла , Что касается 'addInterceptors' - когда я пытался добавить его с помощью этого метода, он больше не появлялся в журналах. –

+0

Плохо. Любая неисправность возникает на сервере. Вы должны отладить свой сервис, чтобы выяснить, кто виноват в этом NPE. Число рейнольдса 'addInterceptors()' - Я не знаю, как это должно работать ... Это ваше приложение, и мы можем только рекомендовать и исправить некоторые очевидные проблемы. Все остальные ваши пожелания зависят от вас. –

ответ

0

У меня такая же ошибка: SOAPFault с NPE внутри без трассировки стека. Во время отладки я заметил, что экземпляр валидатора, используемый в PayloadValidatingInterceptor, имеет значение null, поскольку setSchema не инициализирует его. Но есть метод setXsdSchema, который делает. Таким образом, я мог бы исправить NPE, используя этот метод вместо setSchema следующим образом:

payloadValidatingInterceptor.setXsdSchema(new SimpleXsdSchema(new ClassPathResource("test.xsd"))); 

Для полного примера можно проверить этот пример: http://memorynotfound.com/spring-ws-validate-soap-request-response-xsd-schema/

Надежда, что помогает.

Смежные вопросы