My 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
folder.
但是当我尝试运行该 JAR 时:
java -Xmx1028m -jar myclient-jar-with-dependencies.jar
它抱怨“无法从 wsdl/myclient.wsdl 初始化默认 wsdl”
Why?
我缺少什么?
我怎样才能知道什么路径 that wsdl/myclient.wsdl
在 pom.xml 中翻译成,这会让客户端的 JAR 在运行时抱怨?
Update:我知道一些涉及修改自动生成的代码的解决方案/解决方法:
- 为 wsdl URL 传递“null”,然后使用 ((BindingProvider)port).getRequestContext()。把(BindingProvider.ENDPOINT_ADDRESS_PROPERTY https://stackoverflow.com/a/8977713/1864054, "http://example.com/ http://example.com/....") 设置地址。
- 将 WSDL 作为 Java 资源加载并将其位置传递给服务的构造函数 https://stackoverflow.com/a/10555346/1864054.
但我对需要在其中输入正确值的解决方案更感兴趣pom.xml
像类路径方法 https://stackoverflow.com/a/9875701/1864054(但不幸的是,由于某种原因,类路径对我不起作用)。
有什么想法我应该在那里输入什么吗?显然,这是找出该特定插件的正确路径规则的一个非常简单的情况,但我遗漏了一些东西,而且我不知道它是什么。
该错误来自生成的服务类的静态初始值设定项(由 @WebServiceClient 注释)。它尝试将 wsdl 文件作为资源加载。生成器使用您通过参数 wsdlLocation 提供的值。您应该保留“wsdl/”前缀:
<wsdlLocation>myclient.wsdl</wsdlLocation>
因为 wsdl 直接位于类路径文件夹的根目录中。
顺便说一句:如果省略参数 ,则使用参数 的值(在您的情况下,这在运行时不正确,但如果提供的 URL 是远程 URL 地址,即直接从网络服务服务器)。
BTW2:如果您使用无参数构造函数,您的解决方法 2 实际上是 +/- 服务类的生成代码的作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)