使用apache cxf和maven,我得到的代码看起来不正确

时间:2019-04-08 19:50:32

标签: apache wsdl cxf generated-code

我有几个WSDL文件,我正在使用它们来生成客户端代码以使用SOAP与远程服务进行通信。所生成的代码包括以下内容:

public class AddProductService extends Service {

    static {
        URL url = null;
        try {
            url = new URL("file:/Users/developer/spg/spg-subman/SubscriptionManager/src/main/resources/wsdl/AddProduct.xml");

我已经剪切掉一些生成的代码,并且只包含我认为已损坏的行。

WSDL文件位于src/main/resources/wsdl中的项目中,并且将不会在该目录中部署该代码。

我正在将cxf-codegen-plugin插件与maven结合使用来生成此代码。

我有几个问题:

  1. 运行时是否需要WSDL?
  2. 如果是这样,我可以将其复制到jar文件中,然后将上面的URL指向classpath: URL吗?
  3. 我可以将WSDL文件复制到目标目录,然后使用这些文件为客户端生成Java代码吗?

1 个答案:

答案 0 :(得分:0)

我之所以回答这个问题,是因为我找到了答案,并且看到很多人都在张贴代码片段,这些片段显示出我遇到的相同问题,实际上cxf代码示例也演示了相同的问题。我也有多个wsdlf文件,如何解决也不清楚。

解决此问题的元素是:

  <wsdlLocation>AddProduct.xml</wsdlLocation>

从我的角度来看,问题在于标签wsdlLocation提示了一条路径,但这不是路径的条目,只要将wsdl文件名放在此处并在运行时,只要您将wsdl包含在其中即可,将找到jar文件的类路径。

最后,cxf-codegen-plugin文件的configuration部分的pom节如下:

<configuration>
    <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
    <wsdlOptions>
        <wsdlOption>
            <wsdl>${basedir}/src/main/resources/wsdl/AddProduct.xml</wsdl>
            <extraargs>
                <extraarg>-client</extraarg>
            </extraargs>
            <wsdlLocation>AddProduct.xml</wsdlLocation>
        </wsdlOption>
   </wsdlOptions>
</configuration

其结果是,在静态声明中您将得到以下结果:

URL url = AddProductService.class.getResource("AddProduct.xml");

不是这个:

 url = new URL("file:/Users/tonyg/App/MyManager/src/main/resources/wsdl/AddProduct.xml");