Wit*_*eld 10 wsdl cxf wsdl2java pom.xml
我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>
Run Code Online (Sandbox Code Playgroud)
项目构建正常,没有任何错误或警告,我可以在文件夹myclient.wsdl
下的JAR文件中看到该wsdl
文件.
但是当我尝试运行那个JAR时:
java -Xmx1028m -jar myclient-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)
它抱怨"无法从wsdl/myclient.wsdl初始化默认的wsdl"
为什么?
我错过了什么?
我如何找出什么路径是wsdl/myclient.wsdl
在pom.xml中转化为,使客户的JAR抱怨在运行时?
更新:我知道一些涉及修改自动生成代码的解决方案/解决方法:
但是我更感兴趣的是一个解决方案,需要输入正确的值pom.xml
类似于类路径方法(但遗憾的是,由于某种原因,类路径不适合我).
相反,我应该在那里打字的任何想法?显然,这是一个非常简单的例子,可以找出该特定插件的正确路径规则,但我遗漏了一些东西而且我不知道它是什么.
该错误来自您生成的服务类的静态初始值设定项(由@WebServiceClient 注释)。它尝试加载 wsdl 文件作为资源。生成器使用您通过参数 wsdlLocation 提供的值。你应该去掉“wsdl/”前缀:
<wsdlLocation>myclient.wsdl</wsdlLocation>
Run Code Online (Sandbox Code Playgroud)
因为 wsdl 直接位于类路径文件夹的根目录中。
顺便说一句:如果您省略参数 <wsdlLocation>,则使用参数 <wsdl> 的值(在您的情况下在运行时不正确,但如果提供的 URL 是远程 URL 地址,即直接从网络服务服务器)。
顺便说一句:如果您使用无参数构造函数,您的解决方法 2 实际上是 +/- 服务类的生成代码所做的事情。
我注意到cfx 示例sourceRoot
使用的、wsdl
和位置略有不同wsdlLocation
。
请记住,通常,中的文件src/main/resources
包含在生成的工件中。为了src/main/wsdl
包含文件,需要将其添加为 pom.xml 中的资源:
<resources>
<resource>
<directory>src/main/wsdl</directory>
</resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
尖端:
*.jar
文件并检查是否包含 wsdl 以及路径是什么。 归档时间: |
|
查看次数: |
5993 次 |
最近记录: |