<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    菠蘿三國

    大江東去,浪淘盡...
    隨筆 - 34, 文章 - 47, 評論 - 22, 引用 - 0
    數據加載中……

    Axis開發之工業化-ant使用

    Axis為支持Ant構建,提供了一個axis-ant.jar文件。該文件包含三個可選任務(task)的定義和實現:axis-wsdl2java,axis-java2wsdlaxis-admin。

    1)   任務axis-wsdl2javaAxis提供的工具WSDL2Java具有同樣的功能,根據web服務描述文件生成對應的Java源程序,它的屬性設置與WSDL2Java的命令參數設置類似。

    2)   任務axis-java2wsdl則相反,它與Java2WSDL工具一樣,是根據已有的類文件來生成Web服務描述文件。

    3)   axis-admin是用于web服務的部署和取消部署的,對應于AxisAminClient工具。

    為了使用ant來建構,首先需要將axis-ant.jar包拷貝到antlib目錄下。

    一、下面是詳細的步驟,列了一個1,234,5,看起來清楚一些

    1.   <taskdef>聲明導入axis-ant.jar文件中的屬性文件所定義的任務(task)列表。

    <taskdef resource="axis-tasks.properties" classpathref="axis.classpath"/>

    2.   axis的包都導進來

    <property name="axis.home" value="G:/package/axis-1_3"/>

    <!--定義classpath-->

    <path id="axis.classpath">

         <!—-這里導入的是axis的所有包-->

        <fileset dir="${axis.home}/lib">

            <include name="**/*.jar" />

        </fileset>

         <!—-

    這里導入的是javamail的包,如果web服務有附件的時候要用到,如果沒有包含進來會有一個警告

    -->

        <fileset dir="G:/workpackage/j2ee">

            <include name="**/*.jar" />

        </fileset>

         <!—-其他的包-->

        <fileset dir="${basedir}">

            <include name="other.jar" />

        </fileset>

    </path>

    3.   生成web描述文件和根據描述文件生成java源程序

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    <target name="axis" depends="init">

    <axis-java2wsdl

    classname="net.wide.axis.service.SimpleObjectCreator"     location="http://localhost:8080/axis/services/SimpleObjectCreator"

        namespace="service.axis.wide.net"

        output="simpleObject.wsdl"

        style="RPC"

        extraclasses="net.wide.axis.bean.SimpleObject"

        />

        <axis-wsdl2java all="true"

            url="simpleObject.wsdl"

            deployscope="Request"

            output="${basedir}/src"

            serverside="true"

            skeletondeploy="false"

            testcase="true"

            noimports="false"

            typemappingversion="1.2"/>

        </target>

    3行:我們要發布的web服務接口,需要先定義這個接口,如果是一個具體的類,下面用axis-wsdl2java來生成java文件的時候,會生成該接口和他的實現文件。

    4行:web服務發布的位置

    5行:namespace,這一行用紅字標出來,是要注意的,“service.axis.wide.net,跟我的包結構剛好倒過來,當用axis-wsdl2java來生成java文件的時候,包結構就是“net.wide.axis.service”。

    6行:生成的webservice描述文件,axis-wsdl2java正是用他來生成java文件的

    4.   將生成的java文件編譯,解下就是部署

    1

    2

    3

    4

    5

    6

    7

    8

    9

    <target name="deploy" depends="init">

    <axis-admin

    port="8080"

    hostname="localhost"

    failonerror="true"

    servletpath="axis/services/AdminService"

    debug="true"

    xmlfile="${basedir}\src\net\wide\axis\service\deploy.wsdd"/>

    </target>

    6行:servletpath要跟web.xml中的保持一致

    8行:上一步生成的部署文件

    5.   測試

    二、實例,通過一個實例來看看使用ant的開發步驟。包括下面的內容:

    1)   服務端創建一個JavaBean,并且返回給客戶端

    2)   客戶端將一個JavaBean做為參數傳遞給服務器端

    3)   服務器端返回一個JavaBean數組

    1.   定義JavaBean

    package net.wide.axis.bean;

    public class SimpleObject implements Serializable {

        private String name;

        public getName() {

            return name;

        }

    public void setName(String name) {

            this.name = name;

        }

    }

    注意JavaBean需要實現Serializable接口

    2.   定義web服務接口

    package net.wide.axis.service;

    import net.wide.axis.bean.SimpleObject;

    public interface SimpleObjectCreator{

        public SimpleObject createSimpleObject(String name);

        public void storeSimpleObject(SimpleObject simpleObject);

        public SimpleObject[] createSimpleObjects();

    }

    3.   運行Ant axis,生成了下面的文件

    4.   實現SimpleObjectCreatorSoapBindingImpl.java,這個java文件就是SimpleObjectCreator的實現文件,簡單實現如下:

    public class SimpleObjectCreatorSoapBindingImpl

    implements net.wide.axis.service.SimpleObjectCreator{

        public SimpleObject createSimpleObject(java.lang.String name)

    throws java.rmi.RemoteException {

             System.out.println("創建SimpleObject...");

            SimpleObject simpleObject = new SimpleObject();

            simpleObject.setName(name);

            return simpleObject;

        }

        public void storeSimpleObject(SimpleObject simpleObject)

    throws java.rmi.RemoteException {

             System.out.println("Store");

            System.out.println(simpleObject.getName());

        }

        public SimpleObject[] createSimpleObjects()

    throws java.rmi.RemoteException {

            SimpleObject[] simpleObjects = new SimpleObject[2];

            simpleObjects[0] = new SimpleObject();

            simpleObjects[1] = new SimpleObject();

            simpleObjects[0].setName("First Object");

            simpleObjects[1].setName("Second Object");

            return simpleObjects;

        }

    }

    5.   部署ant deploy

    6.   測試

    public static void main(String[] args)

    throws ServiceException, RemoteException {

            String endPoint =

     "http://localhost:8080/axis/services/SimpleObjectCreator?wsdl";

            Service service = new Service();

            Call call = (Call) service.createCall();

            call.setTargetEndpointAddress(endPoint);

            QName qname =

    new QName("http://bean.axis.wide.net","SimpleObject");

            //測試createSimpleObject方法,它創建一個SimpleObject并且返回該對象

            call.registerTypeMapping(SimpleObject.class,

    qname,

    new BeanSerializerFactory(SimpleObject.class, qname),

    new BeanDeserializerFactory(SimpleObject.class, qname));

            call.setOperationName("createSimpleObject");

            SimpleObject simpleObject =

    (SimpleObject) call.invoke(new Object[]{"Hello"});

            System.out.println(simpleObject.getName());

            //測試storeSimpleObject,客戶端傳遞一個SimpleObject

            call.setOperationName("storeSimpleObject");

            call.invoke(new Object[]{simpleObject});   

            //測試服務端返回一個SimpleObject數組,打印出數組的長度

            qname =

    new QName("service.axis.wide.net","ArrayOf_tns1_SimpleObject");

            call.registerTypeMapping(SimpleObject.class,

    qname,

    new BeanSerializerFactory(SimpleObject.class, qname),

    new BeanDeserializerFactory(SimpleObject.class, qname));

            call.setOperationName("createSimpleObjects");

            SimpleObject[] simpleObjects =

    (SimpleObject[]) call.invoke(new Object[]{});

            System.out.println(simpleObjects.length);

        }

    7.   結合/WEB-INF/server-config.wsdd來分析,部署的時候會生成這個部署描述文件

    <service name="SimpleObjectCreator" provider="java:RPC">

        <operation name="createSimpleObject"

    qname="ns2:createSimpleObject"

                   returnQName="createSimpleObjectReturn"

                soapAction=""

    xmlns:ns1=http://bean.axis.wide.net/

    returnType="ns1:SimpleObject"

                xmlns:ns2="service.axis.wide.net">

           <parameter

    name="in0"

    type="xsd:string"

               xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

        </operation>

        <operation name="storeSimpleObject"

    qname="ns3:storeSimpleObject"

                   soapAction=""

    xmlns:ns3="service.axis.wide.net">

           <parameter name="in0" type="ns4:SimpleObject"

               xmlns:ns4="http://bean.axis.wide.net" />

        </operation>

        <operation name="createSimpleObjects"

           qname="ns5:createSimpleObjects"

           returnQName="createSimpleObjectsReturn"

           returnType="ns5:ArrayOf_tns1_SimpleObject"

    soapAction=""

           xmlns:ns5="service.axis.wide.net" />

        <parameter name="wsdlServicePort" value="SimpleObjectCreator" />

        <parameter name="className"     value="net.wide.axis.service.SimpleObjectCreatorSoapBindingImpl" />

        <parameter name="typeMappingVersion" value="1.2" />

        <parameter name="allowedMethods"

           value="storeSimpleObject createSimpleObject createSimpleObjects" />

        <parameter name="wsdlServiceElement"

           value="SimpleObjectCreatorService" />

        <parameter name="wsdlTargetNamespace"

    value="service.axis.wide.net" />

        <parameter name="wsdlPortType" value="SimpleObjectCreator" />

        <parameter name="scope" value="Request" />

        <parameter name="schemaUnqualified"

           value="service.axis.wide.net,http://bean.axis.wide.net" />

        <typeMapping

            deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

           encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

           qname="ns6:SimpleObject"

           serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

           type="java:net.wide.axis.bean.SimpleObject"

           xmlns:ns6="http://bean.axis.wide.net" />

        <arrayMapping innerType="ns8:SimpleObject"

           languageSpecificType="java:net.wide.axis.bean.SimpleObject[]"

           qname="ns7:ArrayOf_tns1_SimpleObject"

           xmlns:ns7="service.axis.wide.net"

           xmlns:ns8="http://bean.axis.wide.net" />

    </service>

    這一段是SimpleObjectCreator的描述。結合createSimpleObject方法的描述與測試代碼中的:

        QName qname = new QName("http://bean.axis.wide.net","SimpleObject");

    createSimpleObject方法的描述中有下面的一段

    xmlns:ns1=http://bean.axis.wide.net/

    returnType="ns1:SimpleObject"

    對比就知道了,我們使用的命名空間是http://bean.axis.wide.net/

    其他幾個也是這樣。

    posted on 2007-08-12 16:24 菠蘿 閱讀(446) 評論(0)  編輯  收藏 所屬分類: Ant

    主站蜘蛛池模板: 天天综合亚洲色在线精品| 国产精品免费大片| 日韩在线免费视频| 亚洲精品第五页中文字幕| 67pao强力打造国产免费| 亚洲综合久久久久久中文字幕| 在线成人精品国产区免费| 久久久久久亚洲精品中文字幕| 久久久久久免费一区二区三区| 亚洲AV无码不卡在线播放| 亚洲第一区二区快射影院| 国产精品久久久久免费a∨| 亚洲精品色婷婷在线影院| 一进一出60分钟免费视频| 亚洲中文字幕无码一区| 女人体1963午夜免费视频| 久久久亚洲裙底偷窥综合| 永久免费毛片在线播放| 亚洲av永久无码| 精品国产人成亚洲区| 免费播放一区二区三区| 国产精品亚洲一区二区麻豆| 国产精品无码一区二区三区免费| 日韩免费高清一级毛片| 国产亚洲欧洲精品| 国产无人区码卡二卡三卡免费| 久久精品国产亚洲av瑜伽| 国产午夜亚洲不卡| 16女性下面无遮挡免费| 国产精品亚洲AV三区| 亚洲国产精品一区二区第一页| 成人浮力影院免费看| 羞羞漫画页面免费入口欢迎你| 亚洲人成网77777色在线播放| 成人免费毛片内射美女-百度| 免费精品国自产拍在线播放| 精品日韩亚洲AV无码一区二区三区 | 免费无码一区二区三区蜜桃大| 亚洲hairy多毛pics大全| 亚洲精品一品区二品区三品区| 波多野结衣在线免费视频|