1、转 axis 自定义对象序列化阿甘正传转 axis 自定义对象序列化-阿甘正传 基于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.SimpleObjectServ
2、ice/> <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
3、= 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 S
4、ervice对象传递的对象,必需继承Serializablepackage 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
5、 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 SimpleObject
6、Service 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(Si
7、mpleObjectService 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
8、.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
9、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 BeanSer
10、ializerFactory(SimpleObject.class, qn), new BeanDeserializerFactory(SimpleObject.class, qn); /调用sayHello System.out.println(>>>sayHello); call.setOperationName(new QName(nameSpaceUri, sayHello); call.setTargetEndpointAddress(new .URL(wsdlUrl); ret = (String) call.invoke(new Object liu2 ); S
11、ystem.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 .URL(wsdlUrl); ret = (
12、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 .URL(wsdlUr
13、l); 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:/xm
14、l.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 valu
15、e=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>Service StylesAXIS有四种service styles,分别是:RPC, Document, W
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1