前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >axis2:用ant脚本生成webservice client 端的java/c代码

axis2:用ant脚本生成webservice client 端的java/c代码

作者头像
10km
发布2019-05-25 22:00:14
7300
发布2019-05-25 22:00:14
举报
文章被收录于专栏:10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433575

Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security、WS-ReliableMessaging 等)的实现中。@百度百科

axis2是什么不是本文的重点,本文要说的是当我们用axis2已经搭架了一个webservice服务器可以对外部世界提供服务的时候,客户端访问webservice的代码怎么生成?

axis2提供了根据wsdl文件生成java和c代码的工具(Code Generator Tool),利用自动生成的client代码的好处不言而喻,可以大大减少client开发的工作量。

使用Code Generator Tool可以生成java或c代码。同时为了方便在ant下调用,axis2还提供了名为AntCodegenTask的ant task,用它可以很方便的在ant脚本中生成你的webservice client代码。

以下是ant脚本中用AntCodegenTask生成java代码的示例:

代码语言:javascript
复制
    <property environment="env" />
    <!--从环境变量AXIS2_HOME中读取axis2的位置-->
    <property name="AXIS2_HOME" value="${env.AXIS2_HOME}" />
    <path id="axis2.classpath">
        <!--默认的AXIS2 jar包-->
        <fileset dir="${AXIS2_HOME}/lib">
            <include name="*.jar" />
        </fileset>
    </path>
    <!--用AntCodegenTask类定义名为codegen的task,用于client代码生成-->
    <taskdef name="codegen" classname="org.apache.axis2.tool.ant.AntCodegenTask" classpathref="axis2.classpath" />
    <!--生成客户端java代码-->
    <target name="client.java" depends="wsdl" description="生成webservice 客户端代码(java)">
        <echo>从${package-name}.wsdl生成webservice client 代码(java)</echo>
        <delete includeEmptyDirs="true" dir="${client.java.dir}" />
        <!--执行codegen生成代码-->
        <codegen wsdlfilename="${wsdl.dir}/${package-name}.wsdl" databindingName="adb" output="${client.java.dir}" language="java" packageName="${client-package}" />
    </target>

其实如果你看过axis2的源码,AntCodegenTask最终是调用org.apache.axis2.wsdl.codegen.CodeGenerationEngine(代码生成引擎)来实现代码生成,为了支持直接从命令行生成client代码,axis2还提供了一个org.apache.axis2.wsdl.WSDL2Code实现与AntCodegenTask同样的功能,不同的只是它不依赖ant,有main方法可以独立执行。为了简化调用基于WSDL2Code,又提供了WSDL2C和WSDL2Java两个类,因为代码非常简单,这里贴出代码

WSDL2Java.java

代码语言:javascript
复制
package org.apache.axis2.wsdl;

public class WSDL2Java {
    public static void main(String[] args) throws Exception {
        WSDL2Code.main(args);
    }
}

WSDL2C.java

代码语言:javascript
复制
package org.apache.axis2.wsdl;

public class WSDL2C {
    public static void main(String[] args) throws Exception {
        String[] cargs = new String[args.length + 2];
        System.arraycopy(args, 0, cargs, 0, args.length);
        System.setProperty("org.apache.adb.properties",
                           "/org/apache/axis2/schema/c-schema-compile.properties");
        cargs[args.length] = "-l";
        cargs[args.length + 1] = "c";

        WSDL2Code.main(cargs);
    }
}

so,如果不使用现成的AntCodegenTask,也可以直接执行WSDL2Code或WSDL2C或WSDL2Java生成你需要的代码,你可以利用WSDL2Code在shell脚本中完成client代码生成。

以下是用WSDL2C生成webservice client c代码的ant脚本示例:

代码语言:javascript
复制
    <path id="service.classpath">
        <path refid="axis2.classpath" />
        <path refid="lib.classpath" />
        <path refid="project.classpath" />
    </path>
    <!--生成客户端c代码-->
    <target name="client.c" depends="wsdl" description="生成webservice 客户端代码(c)">
        <echo>${package-name}.wsdl生成webservice client 代码(c)</echo>
        <delete includeEmptyDirs="true" dir="${client.c.dir}" />
        <java classname="org.apache.axis2.wsdl.WSDL2C" fork="true">
            <classpath refid="service.classpath" />
            <arg value="-uri" />
            <arg value="${wsdl.dir}/${package-name}.wsdl" />
            <arg value="-o" />
            <arg value="${client.c.dir}" />
            <arg value="-d" />
            <arg value="adb" />
            <arg value="-u"/>
        </java>
    </target>

不论是用现成的AntCodegenTask,还是用WSDL2Code或WSDL2C或WSDL2Java,关于参数的说明都请参见CodegenToolReference

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年08月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档