【问题标题】:How to generate Axis2 source code in custom package如何在自定义包中生成 Axis2 源代码
【发布时间】:2017-06-24 21:00:19
【问题描述】:

我正在尝试从多个 WSDL 文件生成 Axis2 (v1.6.1) Web 服务客户端代码,以便我可以在单个项目中拥有多个 Web 服务客户端。我正在使用 Ant 使用 codegen 任务生成源代码。

因此,我需要使用自定义命名空间来打包映射,以使每个 Web 服务客户端的代码与其他代码保持分离以避免冲突。

这是来自一个示例 WSDL 文件的命名空间:

<wsdl:definitions targetNamespace="http://www.elster-eis.com/ImportExport"
    xmlns:tns="http://www.elster-eis.com/ImportExport"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>

我已设法将生成的代码主体放入适当的包中。而且我已经设法让soapenc 命名空间在自定义包中生成。但是,我无法将org\w3\www\_2004\_06\xmlmime 中生成的代码放入我的自定义包的目录结构中。

这是我的 Ant 构建文件的相关部分:

<property name="srv.pkg" value="com.company.webservice.mas" />

<property name="srv.mappings" value="http://www.elster-eis.com/ImportExport=${srv.pkg},http://www.w3.org/2001/XMLSchema=${srv.pkg}.xsd,http://schemas.xmlsoap.org/wsdl/soap/=${srv.pkg}.soap,http://microsoft.com/wsdl/mime/textMatching/=${srv.pkg}.tm,http://schemas.xmlsoap.org/soap/encoding/=${srv.pkg}.soapenc,http://schemas.xmlsoap.org/wsdl/mime/=${srv.pkg}.mime,http://schemas.xmlsoap.org/wsdl/soap12/=${srv.pkg}.soap12,http://schemas.xmlsoap.org/wsdl/http/=${srv.pkg}.http,http://schemas.xmlsoap.org/wsdl/=${srv.pkg}.wsdl" />

<target name="build.source" depends="define.tasks">
    <codegen
        wsdlfilename="${srv.wsdl}"
        packageName="${srv.pkg}"
        databindingName="xmlbeans"
        output="."
        generateAllClasses="true"
        serverside="true"
        generateservicexml="true"
        testcase="true"
        namespaceToPackages="${srv.mappings}"
    />
</target>

为了便于阅读,这里是再次打包映射的命名空间(它们都在一行上,在 Ant 构建文件中用逗号分隔,没有空格):

http://www.elster-eis.com/ImportExport=${srv.pkg},

http://www.w3.org/2001/XMLSchema=${srv.pkg}.xsd,

http://schemas.xmlsoap.org/wsdl/soap/=${srv.pkg}.soap,

http://microsoft.com/wsdl/mime/textMatching/=${srv.pkg}.tm,

http://schemas.xmlsoap.org/soap/encoding/=${srv.pkg}.soapenc,

http://schemas.xmlsoap.org/wsdl/mime/=${srv.pkg}.mime,

http://schemas.xmlsoap.org/wsdl/soap12/=${srv.pkg}.soap12,

http://schemas.xmlsoap.org/wsdl/http/=${srv.pkg}.http,

http://schemas.xmlsoap.org/wsdl/=${srv.pkg}.wsdl"

我试图让所有生成的代码在我的 ${srv.pkg} 结构下生成,但 org.w3 代码仍然在它自己的目录结构下生成,并且我的命名空间映射被忽略了。

我哪里错了?

【问题讨论】:

  • 你的意思是axis生成你的类的包命名不正确还是目录不正确?
  • @Andremoniy 两者。它们位于 org/w3 等目录中,并且包具有与该结构相同的结构。
  • 我知道,这听起来很傻,但是您是否尝试在运行构建之前删除以前生成的源代码?
  • @Andremoniy 是的,这是在清洁之后,那里什么都没有。我运行我的 Ant 构建,它每次都在那个位置生成。 soapenc 命名空间进入了我的自定义包,而来自 WSDL 本身的代码主体进入了自定义包,而不是 org.w3 代码,我终生无法理解为什么。
  • org.w3 code 代码是什么意思?

标签: java packages axis2


【解决方案1】:

我终于设法让它工作了。我查看了生成的源文件的内容,发现它描述了生成文件的实际命名空间。所以,我刚刚将那个命名空间 (http://www.w3.org/2004/06/xmlmime) 添加到我的映射中,它现在可以正常工作了。

所以,最终的操作命名空间映射是:

    <property name="srv.mappings" value="http://www.elster-eis.com/ImportExport=${srv.pkg},http://www.w3.org/2004/06/xmlmime=${srv.pkg}.xmlmime,http://schemas.xmlsoap.org/soap/encoding/=${srv.pkg}.soapenc" />

这样做之后,生成的源现在会在其标题中显示:

/*
 * An XML attribute type.
 * Localname: contentType
 * Namespace: http://www.w3.org/2004/06/xmlmime
 * Java type: com.csa.webservice.mas.xmlmime.ContentTypeAttribute
 *
 * Automatically generated - do not modify.
 */
package com.csa.webservice.mas.xmlmime;

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 2016-05-21
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    相关资源
    最近更新 更多