webservice学习笔记——提高篇

    技术2022-05-11  124

     /*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"/> 


    最新回复(0)