当前位置: 首页 > 知识库问答 >
问题:

如何在自定义包中生成Axis2源代码

岳景明
2023-03-14

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

因此,我需要使用自定义命名空间来打包映射,以使每个 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代码仍然在它自己的目录结构下生成并且我的命名空间映射被忽略。

我哪里出错了?

共有1个答案

公良昕
2023-03-14

我终于设法让它工作了。我查看了生成的源文件的内容,发现它描述了文件生成的实际命名空间。所以,我只是将该命名空间(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;
 类似资料:
  • 我试图创建一个自定义的原型,它定义了一个实质性的pom.xml并包含几个源文件。 在使用这个原型生成项目时,没有包含我在archetype.xml中定义的任何源(pom.xml按预期生成)。 batfile.bat位于src/main/resources/archetype-resources/src/main/resources中。 我还有一个原型-metadata.xml位于src/main/

  • 我们有一个用例,在这个用例中,我们定义了许多不同的RPC。我们使用google的protobuf java生成了一个基于java的grpc存根代码 要转换为like 在java生成的代码中,每个原始服务应该有2个服务。我们只希望最终java生成的代码具有2个服务,解析器可能会/可能不会更新原始服务。原型文件。 当前protoc是否可以进行这种定制?我们可以扩展插件并编写我们的插件吗-

  • 这类似于这个问题,但我们用Gradle代替。假设我们在构建脚本中直接使用jOOQ的代码生成,正如文档中所描述的那样。 有两个问题。首先,我们将向生成器配置中添加一个新的策略,这应该很简单: 然而,如果我们打印得到的XML配置,名称元素就会被神秘地省略(也会被悄悄地省略): 其次,可以使用什么机制来预编译生成器策略类()并使其在构建脚本的类路径中可用?这里有一个可能的问题:策略代码依赖于jOOQ的c

  • 问题内容: 我正在使用Axis2 1.5.2和Eclipse。我正在使用Eclipse从生成的WSDL生成WSDL和客户端代码。 我创建了一个服务可以抛出的自定义异常。创建Web服务时一切正常。Web服务成功启动,并且可以通过指向Web浏览器来查看生成的WSDL。但是,当我告诉Eclipse使用生成的WSDL生成客户端代码时,我从Eclipse中得到了以下错误: 我的自定义异常是“ InsertU

  • 使用jOOQ,我可能希望将jOOQ代码生成器与Maven和自定义生成器策略结合使用。看起来这可以这样做(省略不相关的部分): 上面的配置描述了问题。jOOQ的代码生成器挂钩到Maven生命周期的生成目标,它发生在生命周期的编译目标之前。但是,对于代码生成,它需要一个预编译的自定义策略类,否则我会得到一个。如何使用Maven解决这个问题?我可以在执行目标之前编译单个类吗?

  • 我有一个Maven插件,它为我的java项目生成源代码,并将它们放在“target/generated sources”文件夹中。我在编译时需要这些源代码。我想在我的项目中有它们,同时修改它,已经生成。当然,我想把它们放在“src”文件夹下的正确文件夹中,而不是放在“target/generated sources”文件夹中。我如何使用Maven来组织它? 换句话说,我希望能够: > 通过运行我的