我正在开发一个将使用从供应商处获得的wsdl的实现。我们的项目在Spring和CXF上运行,并且我想创建一个jar,使我可以访问该供应商的wsdl服务,但是我遇到了类路径问题。

使用CXF的wsdl2java,我能够生成如下代码:

WSDL_LOCATION = new URL("file:SomeService.wsdl");

该服务要求wsdl位于类路径中,但是我想将其 bundle 在jar中,以便将其作为独立jar分发。使用wsdl2java工具,我可以在URL实例中指定所需的字符串。但是,我在有效的jar内没有找到自定义字符串和wsdl文件位置的组合。

我可以根据需要运行此方法的唯一方法是将wsdl文件放在SomeService.class所在的文件夹中,并使用以下行:
WSDL_LOCATION = TrackService.class.getResource("TrackService_v4.wsdl");

但是,这样做的缺点是我必须手动编辑Java代码并自己进行编译。这是不可取的,因为我们最终希望将此过程作为maven构建的一部分,并让wsdl2java自行自动进行生成和编译。

wsdl在 jar 中的任何位置都可以,但是我不知道要传递给wsdl2java的内容以使其引用 jar 中的文件。

有人对此有任何建议或经验吗?

最佳答案

您需要按如下所示指定类路径wsdl的位置,以生成使用ClassLoader将该wsdl作为类路径资源加载的存根:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>2.4.3</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-bindings-soap</artifactId>
            <version>2.4.3</version>
        </dependency>
    </dependencies>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources/cxf
                </sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${basedir}/yourWSDL.wsdl</wsdl>
                        <extraargs>
                            <extraarg>**-wsdlLocation**</extraarg>
                            <extraarg>**classpath:yourWSDL.wsdl**</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

10-02 01:19
查看更多