axis自定义对象序列化

 axis自定义对象序列化

axis 自定义对象序列化,只使用了beanMapping,未说明typeMapping,arrayMapping (参考axis user guide)

基于Axis的自定义对象序列化

1. Axis服务端,注册自定义对象的序列化/反序列化器
主要是修改axis安装目录下WEB-INF/server-config.wsdd文件。

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

  <parameter name="allowedMethods" value="*"/>

  <parameter name="className" value="com.whcyit.axis.SimpleObjectService"/>

  <beanMapping languageSpecificType="java:com.whcyit.axis.SimpleObject"

       qname="ns:SimpleObject" xmlns:ns="urn:BeanService"/>

</service>

注意service/beanMapping的定义。languageSpecificType中定义使用那个类, qname定义类的名称。
 
 

2.  Axis客户端,注册自定义对象的序列化/反序列化器。
 
 

核心代码如下:

//创建调用对象

Service service = new Service();

Call call = null;

call = (Call) service.createCall();

 

//注册SimpleObject的序列化类型

QName qn = new QName("urn:BeanService","SimpleObject");

call.registerTypeMapping(SimpleObject.class, qn,

        new BeanSerializerFactory(SimpleObject.class, qn),

        new BeanDeserializerFactory(SimpleObject.class, qn));
 

全部代码示例如下:

 

//SimpleObject.java

//Web Service对象传递的对象,必需继承Serializable

package com.whcyit.axis;

import java.io.Serializable;

public class SimpleObject implements Serializable {      

       private static final long serialVersionUID = -6414428095965735488L;      

       private int i = 0;

       private float f = 0.0f;

       private String str = "";

       public SimpleObject() {

       }

       public float getFloat() {

              return f;

       }

       public void setFloat(float f) {

              this.f = f;

       }       public int getInt() {

              return i;

      }

       public void setInt(int i) {

              this.i = i;

       }

       public String getString() {

              return str;

       }
 

       public void setString(String str) {

              this.str = str;

       }

}
 


 

// SimpleObjectService.java

//服务程序

package com.whcyit.axis;

public class SimpleObjectService {

       public String sayHello(String name) {

              return "Hello " + name +"!";

       }

 

       public String getString(SimpleObject obj) {

              System.out.println("SimpleObjectService getString invoked!");

              return "return by serviced:"+obj.getString();

       }
 

       public SimpleObject createSimpleObject(int i,float f,String str) {

              System.out.println("SimpleObjectService createSimpleObject invoked!");              

             SimpleObject so = new SimpleObject();

              so.setInt(i);

              so.setFloat(f);

              so.setString(str);

              return so;

       }

 }
 

 

// SimpleObjectClient.java

//客户端调用文件

package com.whcyit.axis;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.ser.BeanDeserializerFactory;

import org.apache.axis.encoding.ser.BeanSerializerFactory;
 

public class SimpleObjectClient {
 

       public static void main(String[] args) {

              String ret = "";

              try {

                     String wsdlUrl = "http://localhost:8080/axis/services/SimpleObjectService?wsdl";

                 String nameSpaceUri = "http://localhost:8080/axis/services/SimpleObjectService";
 

                     //创建调用对象

                     Service service = new Service();

                     Call call = null;

                     call = (Call) service.createCall();               
 
 

                     //注册SimpleObject的序列化类型

                     QName qn = new QName("urn:BeanService","SimpleObject");

                     call.registerTypeMapping(SimpleObject.class, qn,

                                   new BeanSerializerFactory(SimpleObject.class, qn),

                                   new BeanDeserializerFactory(SimpleObject.class, qn));

                     //调用sayHello

                     System.out.println(">>>sayHello");

                     call.setOperationName(new QName(nameSpaceUri, "sayHello"));

                     call.setTargetEndpointAddress(new java.net.URL(wsdlUrl));

                     ret = (String) call.invoke(new Object[] { "liu2" });

                     System.out.println("return value is " + ret);
 

                     //调用getDesc

                     System.out.println(">>>getString");

                     SimpleObject so = new SimpleObject();

                     so.setString("hello!");

                     QName getDescQn = new QName(nameSpaceUri, "getString");
 

                     call.setOperationName(getDescQn);

                     call.setTargetEndpointAddress(new java.net.URL(wsdlUrl));

                     ret = (String) call.invoke(new Object[] { so });

                     System.out.println("return value is " + ret);                 
 
 

                     //调用createSimpleObject

                     System.out.println(">>>createSimpleObject");

                     QName getObjectQn = new QName(nameSpaceUri, "createSimpleObject");

                     call.setOperationName(getObjectQn);

                     call.setTargetEndpointAddress(new java.net.URL(wsdlUrl));

                     SimpleObject rtnSO = (SimpleObject) call.invoke(new Object[]

                             { new Integer(1),new Float(0.1f),"liu2" });

                     System.out.println("return object " + rtnSO.getString());

              } catch (Exception ex) {

                     ex.printStackTrace();

              }

      }

}
 

/server-config.wsdd

//服务端配置文件
 <?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns:java="
http://xml.apache.org/axis/wsdd/providers/java"
xmlns="
http://xml.apache.org/axis/wsdd/">

<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>

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

  <parameter name="allowedMethods" value="*"/>

  <parameter name="className" value="com.whcyit.axis.SimpleObjectService"/>

  <beanMapping languageSpecificType="java:com.whcyit.axis.SimpleObject"

       qname="ns:SimpleObject" xmlns:ns="urn:BeanService"/>

 </service>

<transport name="http">
  <requestFlow>
    <handler type="URLMapper"/>
  </requestFlow>
</transport>

</deployment>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值