Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Spring启动jar文件加载WSDl文件?_Java_Spring_Web Services_Spring Boot_Wsdl - Fatal编程技术网

Java 从Spring启动jar文件加载WSDl文件?

Java 从Spring启动jar文件加载WSDl文件?,java,spring,web-services,spring-boot,wsdl,Java,Spring,Web Services,Spring Boot,Wsdl,对不起,如果这是一个重复,我看了其他几个问题,但似乎没有匹配或提供可行的解决方案 问题 我正在编写一个SpringBoot(v2.0.2)应用程序,这个应用程序公开了一个RESTfulAPI,然后调用WSDL服务。我已经用Maven/jaxb插件生成了WSDL类,所有东西都可以在我的开发机器上运行。当部署到服务器时,我得到一个错误,即WSDL服务类无法加载底层WSDL文件。问题在于,当生成Java类时,它使用的是来自my dev机器的完整路径(来自生成的服务类的片段) WSDL文件(MyWSDL

对不起,如果这是一个重复,我看了其他几个问题,但似乎没有匹配或提供可行的解决方案

问题 我正在编写一个SpringBoot(v2.0.2)应用程序,这个应用程序公开了一个RESTfulAPI,然后调用WSDL服务。我已经用Maven/jaxb插件生成了WSDL类,所有东西都可以在我的开发机器上运行。当部署到服务器时,我得到一个错误,即WSDL服务类无法加载底层WSDL文件。问题在于,当生成Java类时,它使用的是来自my dev机器的完整路径(来自生成的服务类的片段)

WSDL文件(MyWSDL.WSDL)位于我的应用程序的spring启动JAR文件中,它位于根目录下名为“WSDL”的子目录中

问题是否有一种方法可以从JAR文件加载此WSDL,而无需修改生成的类

理想解决方案我希望找到一个不会让我修改生成文件的解决方案(我们打算对多个服务执行此操作),理想情况下,我想要一个可以在构建时完成的解决方案(在pom.xml中?),如果可能的话

尝试过的解决方案

  • 这里的一篇帖子建议在my pom.xml中使用“wsdlLocation”标记,并提供指向WSDL文件的显式路径,例如
    /WSDL/MyWSDL.WSDL
  • 尝试了这方面的大多数解决方案

提前感谢

多亏了这一点,我想我找到了解决方案。显然,答案取决于maven中使用的jaxws工具的版本(jaxws-maven插件)。项目(我继承的)明确要求版本1.12(调用JAX-WSRI 2.1.7-b01-),使用这个版本的工具,我能够在提到的线程中使用“classpath:wsdl/MyWSDL.wsdl”解决方案。当我注意到pom使用的是显式版本时,我删除了jaxws的更新(使用JAX-WSRI2.2.10),但随后“类路径”解决方案停止工作。我切换到线程'/wsdl/MyWSDL.wsdl'中提到的另一个选项

我做了一个快速测试,这似乎解决了问题(在我的开发机器和测试站点中)


谢谢

我建议您使用WSDL创建一个小型库,然后将该库导入到Spring Boot应用程序中。WSDL生成应该考虑所有事情;在
genJaxb
任务中,您可以指定
sourceDir
classesDir
bindings
,等等。之所以将其放在另一个项目中,是因为它通常不会频繁更改,所以您不需要在构建过程中每次都重新生成所有这些内容。感谢您回复@uoɹ,也许我遗漏了一些东西,但我不确定如何解决代码从JAR文件加载WSDL文件的根本问题?问题是,在运行时,代码试图加载WSDL文件,但无法从JAR中获取它,将其移动到另一个JAR中不会解决这一问题,对吗?我不确定为什么需要WSDL文件,但只要它位于Java的
类路径
(如果是这样的话,最好是在这种情况下)或任何其他已知/预定义的位置,任何工件都应该能够读取它。
try {
        URL baseUrl;
        baseUrl = com.mytest.WSDLService.class.getResource(".");
        url = new URL(baseUrl, "/home/users/me/projects/wsdltest/wsdl/MyWSDL.wsdl");
    } catch (MalformedURLException e) {