免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1037 | 回复: 0
打印 上一主题 下一主题

Axis开发之工业化-ant使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-09 07:54 |只看该作者 |倒序浏览

Axis开发之工业化-ant使用

Axis开发之工业化-ant使用

Axis为支持Ant构建,提供了一个axis-ant.jar文件。该文件包含三个可选任务(task)的定义和实现:axis-wsdl2javaaxis-java2wsdlaxis-admin
1)   任务axis-wsdl2java与Axis提供的工具WSDL2Java具有同样的功能,根据web服务描述文件生成对应的Java源程序,它的属性设置与WSDL2Java的命令参数设置类似。
2)   任务axis-java2wsdl则相反,它与Java2WSDL工具一样,是根据已有的类文件来生成Web服务描述文件。
3)   axis-admin是用于web服务的部署和取消部署的,对应于Axis的AminClient工具。
为了使用ant来建构,首先需要将axis-ant.jar包拷贝到ant的lib目录下。
一、下面是详细的步骤,列了一个1,2,3,4,5,看起来清楚一些
1.   用声明导入axis-ant.jar文件中的属性文件所定义的任务(task)列表。
  classpathref="axis.classpath"/>
2.   把axis的包都导进来

定义classpath-->

     这里导入的是axis的所有包-->
     
         
     
     
这里导入的是javamail的包,如果web服务有附件的时候要用到,如果没有包含进来会有一个警告
-->
     
         
     
     其他的包-->
     
         
     

3.   生成web描述文件和根据描述文件生成java源程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

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"
    />
   
        url="simpleObject.wsdl"
        deployscope="Request"
        output="${basedir}/src"
        serverside="true"
        skeletondeploy="false"
        testcase="true"
        noimports="false"
        typemappingversion="1.2"/>
     
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

port="8080"
hostname="localhost"
failonerror="true"
servletpath="axis/services/AdminService"
debug="true"
xmlfile="${basedir}src
etwideaxisservicedeploy.wsdd"/>

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

其他几个也是这样。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12709/showart_66294.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP