Spring 4 + Spring-boot + Web Service soap EndpointNotFound或NoSuchMethodError

时间:2014-12-11 16:17:31

标签: java spring web-services soap spring-boot

我从guide Producing a SOAP web service学习创建Web Service soap 当我有jar文件并运行main方法时一切正常。我更改为由mvn spring-boot运行的war文件:run是一样的。 但接下来我有一个问题,我不解决它不使用xml配置(如果可以)只注释或java代码

我发现了很多类似的问题,但没有人帮忙 e.g

https://stackoverflow.com/questions/21115205/spring-boot-with-spring-ws-soap-endpoint-not-accessable

http://stackoverflow.com/questions/26873168/spring-boot-webservice-from-wsdl-not-working

在显示wsdl之后在wildFly 8.2上部署战争,但没有别的。 我改变了

@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer  {
    @Override
    protected SpringApplicationBuilder configure(
            SpringApplicationBuilder application) {
        return application.sources(WebServiceConfig.class);
    }
}

并在显示wsdl之后在wildFly 8.2中部署,但是在SoapUI中放入请求时

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:gs="http://spring.io/guides/gs-producing-web-service">
   <soapenv:Header/>
     <soapenv:Body>
         <gs:getCountryRequest>
             <gs:name>Spain</gs:name>
         </gs:getCountryRequest>
   </soapenv:Body>
</soapenv:Envelope>

获取

WARN  [org.springframework.ws.server.EndpointNotFound] (default task-7) No endpoint mapping found `for [SaajSoapMessage {http://spring.io/guides/gs-producing-web-service}getCountryRequest]`

并在soapUI中清除页面

我搜索类似的问题,例如Endpoint not accessable

改变

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

@Bean
     public MessageDispatcherServlet dispatcherServlet() {
     return new MessageDispatcherServlet();
     }

是一样的,但是当我使用

@Bean
     public MessageDispatcherServlet dispatcherServlet() {
     return new MessageDispatcherServlet(getContext());
     }


     private WebApplicationContext getContext() {
     AnnotationConfigWebApplicationContext context = new
     AnnotationConfigWebApplicationContext();
     context.setConfigLocation(Application.class.getName());
     return context;
     }

获取

Caused by: java.lang.NoSuchMethodError: org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.applicationContext(Lorg/springframework/context/ApplicationContext;)Lorg/springframework/http/converter/json/Jackson2ObjectMapperBuilder;

whole error logwhole eclipse project

1 个答案:

答案 0 :(得分:0)

感谢M. Deinum的答复,这真的很有帮助。

首先我尝试只使用Application类,但我无法运行服务器。日志Caused by: java.lang.ClassNotFoundException: org.xnio.SslClientAuthMode中的错误接下来我找到了创建两个类WebServiceConfigApplication的解决方案。更改服务器启动后,wsdl向我显示这是一个很好的更改,所以再次感谢你。

此问题导致spring-boot bug GitHub,现在我将整个代码从WebServiceConfig移动到Application并使用最新的编译spring-boot。之后,WS工作正常。在pom粘贴当前应用程序类可能有人会遇到同样的问题。

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(
            SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

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

    @Bean(name = "countries")
    public DefaultWsdl11Definition defaultWsdl11Definition(
            XsdSchema countriesSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("CountriesPort");
        wsdl11Definition.setLocationUri("/ws/");
        wsdl11Definition
                .setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
        wsdl11Definition.setSchema(countriesSchema);
        return wsdl11Definition;
    }

    @Bean
    public XsdSchema countriesSchema() {
        return new SimpleXsdSchema(new ClassPathResource("countries.xsd"));
    }

    private WebApplicationContext getContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation(Application.class.getName());
        return context;
    }
}
相关问题