"无法初始化默认的wsdl ......" - 为什么?

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抱怨在运行时?

更新:我知道一些涉及修改自动生成代码的解决方案/解决方法:

  1. 为wsdl URL传递"null",然后使用((BindingProvider)端口).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY," http://example.com/ ....")来设置地址.
  2. 将WSDL作为Java资源加载并将其位置传递到服务的构造函数中.

但是我更感兴趣的是一个解决方案,需要输入正确的值pom.xml类似于类路径方法(但遗憾的是,由于某种原因,类路径不适合我).

相反,我应该在那里打字的任何想法?显然,这是一个非常简单的例子,可以找出该特定插件的正确路径规则,但我遗漏了一些东西而且我不知道它是什么.

Her*_*eri 5

该错误来自您生成的服务类的静态初始值设定项(由@WebServiceClient 注释)。它尝试加载 wsdl 文件作为资源。生成器使用您通过参数 wsdlLocation 提供的值。你应该去掉“wsdl/”前缀:

<wsdlLocation>myclient.wsdl</wsdlLocation>
Run Code Online (Sandbox Code Playgroud)

因为 wsdl 直接位于类路径文件夹的根目录中。

顺便说一句:如果您省略参数 <wsdlLocation>,则使用参数 <wsdl> 的值(在您的情况下在运行时不正确,但如果提供的 URL 是远程 URL 地址,即直接从网络服务服务器)。

顺便说一句:如果您使用无参数构造函数,您的解决方法 2 实际上是 +/- 服务类的生成代码所做的事情。


and*_*rel 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 次

最近记录:

10 年,6 月 前