繁体   English   中英

春季4 +春季启动+ Web服务肥皂EndpointNotFound或NoSuchMethodError

[英]Spring 4 + Spring-boot + Web Service soap EndpointNotFound or NoSuchMethodError

我从指南生产SOAP Web服务中学习创建Web服务肥皂。当我有jar文件并运行main方法时,一切正常。 我更改为由mvn spring-boot运行的war文件:run相同。 但是接下来我有一个问题,如果不使用xml配置(如果可以的话),我将无法解决它,只能使用注释或Java代码

我发现了很多类似的问题,但没有帮助,例如

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中清除页面

我搜索类似的问题,例如无法访问端点

变了

@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;

整个错误日志整个Eclipse项目

感谢Deinum M.的回复,它确实很有帮助。

首先,我尝试仅使用Application类,但无法运行服务器。 日志错误原因Caused by: java.lang.ClassNotFoundException: org.xnio.SslClientAuthMode接下来,我找到了创建两个类WebServiceConfigApplication解决方案。更改服务器启动后,wsdl对我来说是很好的更改,因此再次感谢您。

这个问题是由spring-boot bug GitHub引起的,现在我将整个代码从WebServiceConfig移到Application并使用最新的spring-boot编译。 在WS运行良好之后。在pom Paste当前的Application类中,也许有人会遇到相同的问题。

@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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM