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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用apache cxf和maven我得到的代码看起来不正确相关的知识,希望对你有一定的参考价值。

我有几个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代码吗?
答案

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

解决此问题的元素是:

  <wsdlLocation>AddProduct.xml</wsdlLocation>

从我的角度来看问题是标签wsdlLocation建议一个路径,但这不是路径的条目,你只需将wsdl文件名放在这里并在运行时,只要你在类路径中包含wsdl即可。它将被发现的jar文件。

最后,cxf-codegen-plugin文件的配置部分的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");

以上是关于使用apache cxf和maven我得到的代码看起来不正确的主要内容,如果未能解决你的问题,请参考以下文章

cxf maven 代码生成插件配置

使用 Apache CXF 在 SOAP POST 请求中出错,但 curl 有效

Java, apache.CXF plugin - 使用本地 WSDL 使用远程托管服务

在 Wildfly 部署中使用 CXF 库并提供 Maven 工件

Spring+CXF+Maven发布Webservice

java maven cxf笔记