【问题标题】:Using apache cxf and maven I get code that looks incorrect使用 apache cxf 和 maven 我得到的代码看起来不正确
【发布时间】:2019-08-30 00:53:21
【问题描述】:

我有几个 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 的项目中,并且该目录不会存在于将部署此代码的位置。

我正在使用带有 maven 的 cxf-codegen-plugin 插件来生成此代码。

我有几个问题:

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

【问题讨论】:

    标签: apache wsdl cxf generated-code


    【解决方案1】:

    我回答这个问题是因为我找到了答案,而且我看到很多人发布的代码片段显示了我遇到的相同问题,实际上 cxf 代码示例演示了相同的问题。此外,我有多个 wsdlf 文件,如何解决也不清楚。

    解决此问题的元素是:

      <wsdlLocation>AddProduct.xml</wsdlLocation>
    

    从我的角度来看,问题是标签 wsdlLocation 建议了一个路径,但这不是路径的条目,只要将 wsdl 包含在将找到它的 jar 文件的类路径。

    最后,在 pom 中 cxf-codegen-plugin 文件的配置部分的节看起来像这样:

    <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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多