2017-10-09 5 views
0

Salut J'essaie de créer un service SOAP @endpoint, mais lorsque j'essaie d'obtenir le WSDL, j'obtiens une méthode 405 non autorisée.Spring-WS SOAP Endpoint 405 Méthode non autorisée

Il est mon point de terminaison de service:

@Endpoint 
public class SubscribeMemberService { 

     public static final String NAMESPACE_URI = "urn:v1.webservice.subscription.test.org"; 

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "subscribe") 
    @ResponsePayload 
    public SubscribeMemberResponse subscribe(@RequestPayload SubscribeMemberRequest request) throws SubscribeMemberFault_Exception { 
     LOG.info("request received: LastName:" + request.getName().getLastName()); 

      SubscribeMemberResponse response = new SubscribeMemberResponse(); 
      response.setInfoMessage("Subscription of " + request.getName().getLastName()); 
      LOG.info("sending response:" + request.getName().getLastName()); 
      return response; 

    } 

} 

Et il y a ma config WS:

@EnableWs 
@Configuration 
@ComponentScan("org.test") 
public class WebServiceConfig extends WsConfigurerAdapter { 

     @Bean 
     public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) { 
       MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
       servlet.setApplicationContext(applicationContext); 
       servlet.setTransformWsdlLocations(true); 
       return new ServletRegistrationBean(servlet, "/ws/*"); 
     } 

     @Bean(name = "subscribeMember") 
     public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema subscribeMember) { 
       DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); 
       wsdl11Definition.setPortTypeName("subscribeMemberPort"); 
       wsdl11Definition.setLocationUri("/ws"); 
       wsdl11Definition.setTargetNamespace(SubscribeMemberService.NAMESPACE_URI); 
       wsdl11Definition.setSchema(subscribeMember); 
       return wsdl11Definition; 
     } 

     @Bean 
     public XsdSchema subscribeMemberSchema() { 
       return new SimpleXsdSchema(new ClassPathResource("META-INF/wsdl/subscribeMember.xsd")); 
     } 
} 

Serait-ce lien vers le WebSecurityConfigurerAdapter? Parce que sur le/ws/* je n'ai pas un 404 pas trouvé, mais je reçois 405 pas autorisé. Des idées?

Note: le filtre de sécurité dans la classe WebSecurityConfigurerAdapter est

protected void configure(HttpSecurity http) throws Exception { 
     http.httpBasic() 
       .and() 
       .authorizeRequests() 
       .anyRequest().hasRole("mySuperRole").and() 
       .csrf().disable(); 
} 
+0

Peut-être que j'ai trouvé la question « Obtenir un code d'erreur 405 (Méthode non autorisée) lors de l'accès à un service SOAP avec un navigateur (c'est-à-dire via un GET) est un comportement correct: tout l'accès HTTP SOAP est fait via un POST, pas un GET Vous pouvez essayer de pointer un client SOAP sur le WSDL (SoapUI par exemple), et voir si cela fonctionne au lieu." https://stackoverflow.com/questions/27198987/soap-webservice-endpoint-from-wsdl Je vais tester avec SoapUI – user1810567

+0

Non ça ne fonctionne pas avec SOAP UI: "Erreur de chargement [http: // localhost: 8080/abonnement- webservice/v1/ws/SubscribeMemberService? wsdl]: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: erreur: fin inattendue du fichier après nul. " Et de toute façon le fichier wsdl devrait être accessible via GET. – user1810567

Répondre

0

J'ai trouvé la solution:

  1. J'ai désactivé le WebSecurityConfigurerAdapter pour être sûr que ce n'était pas un problème venant de la sécurité.
  2. je découvre un problème dans les journaux: « SAAJ0511: Impossible de créer enveloppe de source donnée »
  3. Pour résoudre ce problème, j'ai décidé d'utiliser le plugin Maven « jaxb2-maven-plugin » du tuto officiel (https://spring.io/guides/gs/producing-web-service/#_generate_domain_classes_based_on_an_xml_schema) à la place de "jaxws-maven-plugin". Et j'ai déplacé les fichiers wsdl dans/resources.
  4. Je converti mon exception SOAP avec ce tutoriel: http://memorynotfound.com/spring-ws-add-detail-soapfault-exception-handling/
  5. Je réactivées le WebSecurityConfigurerAdapter