【问题标题】:Spring Boot + Apache CXF: why can't find wsdl?Spring Boot + Apache CXF:为什么找不到 wsdl?
【发布时间】:2016-02-08 14:26:21
【问题描述】:

同学们,我还在努力“结交大家”Spring-Boot、Tomcat和web服务实现类:

@javax.jws.WebService(
                      serviceName = "ServiceForApp",
                      portName = "ServiceEndPoind",
                      targetNamespace = "http://new.webservice.namespace",
                      endpointInterface = "com.comp.appserv.WebServiceInterface",
                          wsdlLocation = "resources/WebService.wsdl"
                          )

public class ServiceEndPoindImpl implements WebServiceInterface {logic};

我有一个应用类:

package com.comp.config;


import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import com.comp.appserv.ServiceEndPoindImpl;

import javax.xml.ws.Endpoint;


@SpringBootApplication
public class Application  {

    public static final String SERVLET_MAPPING_URL_PATH = "/soap/*";
    public static final String SERVICE_NAME_URL_PATH = "/app";

    @Autowired
    private ApplicationContext applicationContext;

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

    @Bean
    public ServletRegistrationBean dispatcherServlet() {
        return new ServletRegistrationBean(new CXFServlet(), SERVLET_MAPPING_URL_PATH);
    }


    @Bean(name = Bus.DEFAULT_BUS_ID)
    // <bean id="cxf" class="org.apache.cxf.bus.spring.SpringBus">
    public SpringBus springBus() {
        return new SpringBus();
    }

    @Bean
    // <jaxws:endpoint id="app" implementor="com.dlizarra.app.ws.AppImpl" address="/app">
    public Endpoint app() {
        Bus bus = (Bus) applicationContext.getBean(Bus.DEFAULT_BUS_ID);
        Object implementor = new ServiceEndPoindImpl();
        EndpointImpl endpoint = new EndpointImpl(bus, implementor);
        endpoint.publish(SERVICE_NAME_URL_PATH);
        return endpoint;
    }
}

我的目标是获取单个 jar 文件,其中嵌入了 Tomcat 和部署在其上的 Web 服务。 目前我的问题是在mvn spring-boot:run 之后我收到异常

Caused by: java.io.FileNotFoundException: C:\Users\Maya\git\web-services\resources\WebService.wsdl (The system cannot find the file specified)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:93)
        at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
        at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)


The full stacktrace is here: http://pastebin.com/Ez3S5CWu

你能帮我解答下一个问题吗:

  1. 为什么 Spring 尝试通过此链接 C:\Users\Maya\git\web-services\resources\WebService.wsdl 查找 wsdl,而不是从 @javax.jws.WebService 注释的路径?我应该在哪里设置这条路径?

  2. 使用嵌入式 Tomcat 创建单个 jar 的方法是否正确?

【问题讨论】:

    标签: java web-services tomcat spring-boot cxf


    【解决方案1】:

    Spring is 使用来自注解的路径;但由于它是相对路径,因此当前目录(您的应用程序在其中启动 rom )用于构建完整路径。

    试试

    wsdlLocation = "classpath:resources/WebService.wsdl"
    

    通过类路径搜索。

    至于问题 2,只要没有任何阻碍,它是否是正确的开始方法。您的 IT 基础架构可能会出于某些原因否决它。

    【讨论】:

    • java.io.FileNotFoundException: Unable to load the resource [classpath:resources/IsBankService.wsdl] using the thread context class loader or the current classs class loader,但我通过向 wsdl 文件添加完整路径来修复它。谢谢。
    • 糟糕。完整路径再次出现问题。 =(
    • 你能否给Caused by: java.io.FileNotFoundException: C:\Users\Maya\git\app-services\resources\AppService.wsdl更多建议
    • 绝对路径的问题是,当应用程序在开发环境之外构建和运行时,它可能不起作用。所以我真的会把wsdl打包到jar中(如果你使用maven,将它设置在/src/main/resources下)并通过类路径访问它。确保它在生成的 jar 中(解压缩以确保构建过程已将其设置在那里。)
    • smarquis。我打开 jar 并在 jar 的根目录中找到 wsdl(不在资源文件夹中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多