我的pom.xml
包含以下内容,以自动为具有以下指定的WSDL的有效Web服务生成客户端:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>generate-sources</id>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/myclient.wsdl</wsdl>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-verbose</extraarg>
</extraargs>
<wsdlLocation>wsdl/myclient.wsdl</wsdlLocation>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
项目构建正常,没有任何错误或警告,我可以在myclient.wsdl
文件夹下的JAR文件中看到文件wsdl
。
但是当我尝试运行那个JAR时:
java -Xmx1028m -jar myclient-jar-with-dependencies.jar
它抱怨“无法从wsdl / myclient.wsdl初始化默认的wsdl”
为什么吗
我缺少什么?
如何找出pom.xml 中wsdl/myclient.wsdl
转换为的路径,这会导致客户端的JAR在运行时抱怨?
更新:我了解一些涉及修改自动生成代码的解决方案/解决方法:
但是我更感兴趣的是一个解决方案,需要在pom.xml
中输入正确的值,就像classpath approach一样(但遗憾的是,由于某些原因,类路径对我不起作用)。
我应该在那里输入什么想法呢?显然,这是一个非常简单的例子,可以找出该特定插件的正确路径规则,但我遗漏了一些东西而且我不知道它是什么。
答案 0 :(得分:4)
错误来自生成的服务类的静态初始化程序(由@WebServiceClient注释)。它尝试将wsdl文件作为资源加载。生成器使用参数wsdlLocation提供的值。你应该省去“wsdl /”前缀:
<wsdlLocation>myclient.wsdl</wsdlLocation>
因为wsdl直接位于类路径文件夹的根目录中。
BTW:如果省略参数&lt; wsdlLocation&gt; param&lt; wsdl&gt;的值使用(在您的情况下在运行时不正确,但如果提供的URL是远程URL地址,即直接从Web服务服务器获取),则会更正。
BTW2:您的解决方法2实际上是+/-如果您使用无参数构造函数,生成的服务类代码会执行什么操作。
答案 1 :(得分:1)
我注意到cfx examples使用sourceRoot
,wsdl
和wsdlLocation
略有不同的位置。
请记住,src/main/resources
中的文件通常包含在生成的工件中。为了包含src/main/wsdl
中的文件,需要将其作为资源添加到pom.xml中:
<resources>
<resource>
<directory>src/main/wsdl</directory>
</resource>
</resources>
提示:
*.jar
- 文件并检查是否包含wsdl以及路径是什么。