/*title: web service入门学习笔记(五)**date: 2007/01/18**author:laomai**url: http://blog.csdn.net/laomai/*/
五、精简后的ant脚本1、卸载webservice 执行原build.xml里的clean和 undeploy任务,把安装好的webservice删除掉,具体办法为: (1)在myeclipse里打开build.xml文件 (2)在build.xml文件里单击右键菜单中的""run as"->"2 ant build..."", (3)在弹出的对话框中只选择clean和undelpoy任务。 然后单击"run"按钮。 此时再访问http://localhost:8080/Hello/HelloService?WSDL,出现http 404错误,说明卸载成功
2、简化后的脚本内容,在hello-jaxws目录下新建一个buildtest.xml文件,内容为<?xml version="1.0" encoding="UTF-8"?><project name="hello-jaxws" default="all" basedir="."> <!-- javaee安装目录的设置,代替了原来脚本中的导入语句 --> <property name="javaee.home" value = "d:/Sun/SDK"/> <property name="javaee.domaindir" value="${javaee.home}/domains/domain1"/> <property name="javaee.server.name" value="localhost"/> <property name="javaee.server.port" value="8080"/>
<!-- 设置发布目录和类的输出目录 --> <property name="autodeploydir" value="${javaee.domaindir}/autodeploy"/> <property name="classesdir" value="./build"/>
<!-- 设置java类库路径 --> <path id="classpath"> <pathelement location="${javaee.home}/lib/j2ee.jar"/> <pathelement location="${classesdir}"/> </path>
<target name="all" depends="run-client"> <!--antcall target="restore"/--> </target>
<target name="run-client" depends="compile-client,run-client-windows" />
<!-- 运行测试类,为项目的最后一个步骤--> <target name="run-client-windows"> <exec executable="${javaee.home}/bin/appclient.bat" dir="${classesdir}"> <arg value="client.Client" /> </exec> </target>
<!-- 编译测试webservice的客户类,为项目的第三个步骤,本步骤的输出文件为 ${classesdir}/client/Client.class --> <target name="compile-client" depends="get-artifacts"> <javac srcdir="./src/client" destdir="${classesdir}"> <classpath refid="classpath" /> </javac> </target>
<target name="get-artifacts" depends="compile-deploy-service,get-artifacts-windows"/> <!-- 本步骤的目的是生成客户端的stub文件,是项目的第二个步骤,本步骤的输出文件为 在${classesdir}下面自动生成了如下的文件 GetHello.java GetHelloResponse.java Hello.java HelloService.java ObjectFactory.java package-info.java package-info.class GetHello.class GetHelloResponse.class Hello.class HelloService.class ObjectFactory.class --> <target name="get-artifacts-windows"> <exec executable="${javaee.home}/bin/wsimport.bat"> <arg line="-keep -d ${classesdir} http://${javaee.server.name}:${javaee.server.port}/Hello/HelloService?WSDL" /> </exec> </target>
<!-- 本步骤的目的是编译服务器类,并自动产生wsdl.是项目的第一个步骤,本步骤的主要输出文件为 ${autodeploydir}/endpoint/Hello.class ${autodeploydir}/domain1/autodeploy/endpoint/Hello.class_deployed 在d:/Sun/SDK/domains/domain1/applications/j2ee-modules 下建立一个endpoint_Hello目录, 在d:/Sun/SDK/domains/domain1/generated/ejb/j2ee-modules建立一个 endpoint_Hello目录,这个目录下又建立了一个endpoint/jaxws目录,里面有如下内容 GetHello.java GetHelloResponse.java GetHello.class GetHelloResponse.class 在D:/Sun/SDK/domains/domain1/generated/xml/j2ee-modules/下建立一个 endpoint_Hello目录,这个目录下又有一个WEB-INF子目录,内容为 wsdl子目录 sun-web.xml 文件 web.xml 文件 webservices.xml 文件 wsdl子目录下又有两个文件 HelloService.wsdl HelloService_schema1.xsd 当我们在浏览器输入http://localhost:8080/Hello/HelloService?WSDL时,显示的正是 这个domains/domain1/generated/xml/j2ee-modules/endpoint_Hello/WEB-INF/wsdl 文件的内容 --> <target name="compile-deploy-service"> <mkdir dir="${classesdir}" /> <echo message="${javaee.home}" /> <javac srcdir="./src" includes="endpoint/**" destdir="${autodeploydir}" classpath="${javaee.home}/lib/j2ee.jar" /> <waitfor maxwait="100" maxwaitunit="second"> <or> <available file="${autodeploydir}/endpoint/Hello.class_deployed"/> <available file="${autodeploydir}/endpoint/Hello.class_deployFailed"/> </or> </waitfor> <condition property="deploy_succeeded"> <available file="${autodeploydir}/endpoint/Hello.class_deployed"/> </condition> <condition property="deploy_failed"> <available file="${autodeploydir}/endpoint/Hello.class_deployFailed"/> </condition> </target>
<!-- 以下的任务用于清理和卸载--> <target name="clean"> <delete dir="${classesdir}"/> </target>
<target name="restore"> <delete> <fileset dir="${autodeploydir}/endpoint" includes="Hello*.*"/> </delete> </target>
<target name="undeploy"> <antcall target="restore"/> </target></project>
3、运行结果在myeclipse里执行这个刚才编写的buildtest.xml脚本,console里的输出为Buildfile: D:/Sun/SDK/samples/javaee5/webservices/hello-jaxws/buildtest.xmlcompile-deploy-service: [mkdir] Created dir: D:/Sun/SDK/samples/javaee5/webservices/hello-jaxws/build [echo] d:/Sun/SDK [javac] Compiling 1 source file to D:/Sun/SDK/domains/domain1/autodeployget-artifacts-windows:get-artifacts:compile-client: [javac] Compiling 1 source file to D:/Sun/SDK/samples/javaee5/webservices/hello-jaxws/buildrun-client-windows: [exec] Hello result = Hello Administrator!run-client:all:BUILD SUCCESSFULTotal time: 50 seconds
也执行成功
/*title: web service入门学习笔记(六)**date: 2007/01/19**author:laomai**url: http://blog.csdn.net/laomai/*/
六、一个通用的ant脚本1、脚本内容 上面的buildtest.xml脚本虽然对原始的build.xml做了精简,但是还不够通用,比如服务器的类名和方法名等等都写死了,显然还不适合我们的需要,于是我又写了一个相对通用的脚本mybuild.xml,内容如下<?xml version="1.0" encoding="UTF-8"?>
<project name="hello-jaxws" default="all" basedir="."> <!-- javaee安装目录的设置,代替了原来脚本中的导入语句 --> <property name="javaee.home" value = "d:/Sun/SDK"/> <property name="javaee.domaindir" value="${javaee.home}/domains/domain1"/> <property name="javaee.server.name" value="localhost"/> <property name="javaee.server.port" value="8080"/>
<!-- 设置发布目录和类的输出目录 --> <property name="autodeploydir" value="${javaee.domaindir}/autodeploy"/> <property name="classesdir" value="./build"/>
<!-- 设置java类库路径 --> <path id="classpath"> <pathelement location="${javaee.home}/lib/j2ee.jar"/> <pathelement location="${classesdir}"/> </path>
<!-- 提供服务的类名 --> <property name="serviceclass" value="Hello" /> <property name="serverclasspath" value="endpoint" /> <!-- 服务器所在的package名称 也就是Hello.java文件中第一句 package endpoint;语句中的endpoint --> <!-- 调用webservice的测试类名--> <property name = "clientclass" value="Client"/> <property name = "clientclasspath" value="client"/> <!-- 测试类所在的package名称, 也就是Client.java文件中第一句 package client;语句中的client; --> <!-- 生成的wsdl文件的uri的格式,注意value的值分成两行写时有问题, 这里为了阅读方便而分行,拷贝时必须放到一行 我还没找到ant脚本里的续行符是什么:-( --> <property name="wsdluri" value="http://${javaee.server.name}:${javaee.server.port} /${serviceclass}/${serviceclass}Service?WSDL" />
<target name="all" depends="run-client"> <!-- antcall target="restore"/ --> </target>
<target name="run-client" depends="compile-client,run-client-windows" />
<!-- 运行测试类,为项目的最后一个步骤--> <target name="run-client-windows"> <exec executable="${javaee.home}/bin/appclient.bat" dir="${classesdir}"> <arg value="${clientclasspath}.${clientclass}" /> </exec> </target>
<!-- 编译测试webservice的客户类,为项目的第三个步骤,本步骤的输出文件为 ${classesdir}/client/Client.class -->
<target name="compile-client" depends="get-artifacts"> <javac srcdir="./src/${clientclasspath}" destdir="${classesdir}"> <classpath refid="classpath" /> </javac> </target>
<target name="get-artifacts" depends="compile-deploy- ②asadmin deploy --user admin --password laomailaomai --host localhost --port 4848 --contextroot hello --upload=true --target serverservice,get-artifacts-windows"/>
<!-- 生成客户端的stub类 --> <target name="get-artifacts-windows"> <exec executable="${javaee.home}/bin/wsimport.bat"> <arg line="-keep -d ${classesdir} ${wsdluri}" /> </exec> </target>
<!-- 本步骤的目的是编译服务器类,并自动产生wsdl文件--> <target name="compile-deploy-service"> <echo message="${javaee.home}" /> <javac srcdir="./src" includes="${serverclasspath}/**" destdir="${autodeploydir}" classpath="${javaee.home}/lib/j2ee.jar" /> <waitfor maxwait="100" maxwaitunit="second"> <or> <available file="${autodeploydir}/${serverclasspath}/${serviceclass}.class_deployed"/> <available file="${autodeploydir}/${serverclasspath}/${serviceclass}.class_deployFailed"/> </or> </waitfor> <condition property="deploy_succeeded"> <available file="${autodeploydir}/${serverclasspath}/${serviceclass}.class_deployed"/> </condition> <condition property="deploy_failed"> <available file="${autodeploydir}/${serverclasspath}/${serviceclass}.class_deployFailed"/> </condition> </target>
<!-- 以下的任务用于清理和卸载--> <target name="clean"> <delete dir="${autodeploydir}/${serverclasspath}"/> <delete dir="${classesdir}/${serverclasspath}"/> <delete dir="${classesdir}/${clientclasspath}"/> </target></project>
2、脚本的使用方式以后再写自己service时,只要按实际情况改变以下4条语句中的value值就可以了<property name="serviceclass" value="Hello" /> <property name="serverclasspath" value="endpoint" /><property name = "clientclass" value="Client"/><property name = "clientclasspath" value="client"/>
