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

60 篇文章 1 订阅
33 篇文章 0 订阅

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代码的示例:

	<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

package org.apache.axis2.wsdl;

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

WSDL2C.java

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脚本示例:

	<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][1]
[1]:http://axis.apache.org/axis2/java/core/tools/CodegenToolReference.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值