2016-01-21 2 views
2

J'ai une application que je voudrais valider automatiquement les messages qui sont reçus et envoyés. J'ai joint le PayloadValidatingInterceptor et définir le schéma que je voudrais à utiliser:PayloadValidatingInterceptor ne se déclenche pas pour @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); 
    } 
} 

Je peux voir que l'intercepteur est obtenir chargé

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

Cependant, quand je jette un message SOAP inopposable Je reçois un NullPointerException plutôt qu'un message de validation. Donc, soit ma configuration ou mes attentes sont fausses. Quelqu'un peut-il pointer vers quoi?

+0

Veuillez partager le StackTrace pour ce 'NPE'. De l'autre côté, je ne vois pas l'implémentation de 'addInterceptors (List ) pour ajouter votre' PayloadValidatingInterceptor' au mappage de noeud final ... –

+0

Je n'obtiens pas de pile - l'erreur est renvoyée dans une réponse de panne de savon . En ce qui concerne le 'addInterceptors' - lorsque j'ai essayé de l'ajouter avec cette méthode, il n'apparaissait plus dans les journaux. –

+0

C'est mauvais. Toute faute est un problème sur le serveur. Vous devez déboguer votre service pour déterminer qui est coupable dans NPE. Ré. 'addInterceptors()' - Je ne les connais pas comment cela devrait fonctionner ... C'est votre application et nous ne pouvons que recommander et résoudre certains problèmes évidents. Tous vos autres souhaits sont à vous. –

Répondre

0

J'ai la même erreur: un SOAPFault avec un NPE à l'intérieur sans trace de pile. Pendant le débogage, j'ai remarqué que l'instance de validateur utilisée dans PayloadValidatingInterceptor est nulle, car setSchema ne l'initialise pas. Mais il existe la méthode setXsdSchema, que initialise. Donc, je pouvais fixer le NPE en utilisant cette méthode au lieu de setSchema comme suit:

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

Pour un exemple complet, on peut vérifier cet exemple: http://memorynotfound.com/spring-ws-validate-soap-request-response-xsd-schema/

espoir qui aide.