在用eclipes开发web service的时候,经常会用到java2wsdl,wsdl2java等命令,axis在发布的时候提供了相应的ant task,并放到了axis-ant.jar中。
按照axis的ant相关文档配置的时候,需要引入相应的ant task,我在做这个配置的时候遇到了些障碍,开始的build.xml如下所示:
<?xml version="1.0"?>
<project default="axis" basedir=".">
<property name="axis.home" location="../" />
<path id="axis.classpath">
<fileset dir="${axis.home}/WebRoot/WEB-INF/lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="${axis.home}/WebRoot/WEB-INF/classes">
<include name="**/*.class" />
</fileset>
</path>
<taskdef resource="axis-tasks.properties" classpathref="/axis.classpath" />
<target name="init" />
<target name="axis">
<axis-java2wsdl
classname="axis.service.SimpleObjectCreator"
location="http://localhost:8080/axis/services/SimpleObjectCreator"
namespace="service.axis"
output="simpleObject.wsdl"
style="RPC"
extraclasses="axis.bean.SimpleObject"
>
<classpath refid="axis.classpath"/>
</axis-java2wsdl>
<axis-wsdl2java all="true"
url="simpleObject.wsdl"
deployscope="Request"
output="${axis.home}/src"
serverside="true"
skeletondeploy="false"
testcase="true"
noimports="false"
typemappingversion="1.2"
/>
</target>
<target name="deploy">
<axis-admin
port="8080"
hostname="localhost"
failonerror="true"
servletpath="axis/services/AdminService"
debug="true"
xmlfile="${axis.home}\src\axis\service\deploy.wsdd"
/>
</target>
</project>
在执行ant的时候,总是报
java.util.zip.ZipException: error in opening zip file
的错误,百思不得其解,后来找到了错误的原因,原来出在
<path id="axis.classpath">...</path>
的定义上,因为这里包含
<fileset dir="${axis.home}/WebRoot/WEB-INF/classes">
<include name="**/*.class" />
</fileset>
部分,<taskdef>解析时会把我指定的class文件当作一个压缩文件进行解压,产生异常,改成如下定义即可:
<path id="axis.classpath">
<fileset dir="${axis.home}/WebRoot/WEB-INF/lib">
<include name="**/*.jar" />
</fileset>
<pathelement location="${axis.home}/WebRoot/WEB-INF/classes"/>
</path>
第二个fileset改成pathelement,当<taskdef>解析时会把指定的location当作一个路径,不会报错。
对于开源的ant真是又爱又恨啊,可恨的是文档太少了,如<path>,<taskdef>的说明等,惜墨如金啊。