转axis自定义对象序列化

上传人:lis****211 文档编号:62284057 上传时间:2022-03-14 格式:DOC 页数:10 大小:39.50KB
返回 下载 相关 举报
转axis自定义对象序列化_第1页
第1页 / 共10页
转axis自定义对象序列化_第2页
第2页 / 共10页
转axis自定义对象序列化_第3页
第3页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
基于 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.SimpleObjectqname=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(inti,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; importorg.apache.axis.encoding.ser.BeanSerializerFactory;public classpublic static void main(StringSimpleObjectClient args) String ret = try String wsdlUrl =http:/localhost:8080/axis/services/SimpleObjectService?wsdl;String nameSpaceUri =http:/localhost:8080/axis/services/SimpleObjectService;Service();Service service = newCall 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);/调用 sayHelloSystem.out.println(>>>sayHello);call.setOperationName(newQName(nameSpaceUri, sayHello);call.setTargetEndpointAddress(new .URL(wsdlUrl);ret = (String) call.invoke(new Object liu2 );System.out.println(return value is + ret);/ 调用 getDescSystem.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 = (String)call.invoke(new Object so );System.out.println(return value is + ret);/调用 createSimpleObjectSystem.out.println(>>>createSimpleObject); QName getObjectQn = new QName(nameSpaceUri, createSimpleObject); call.setOperationName(getObjectQn); call.setTargetEndpointAddress(new .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:SimpleObjectxmlns:ns=urn:BeanService/></service><transport name=http><requestFlow><handler type=URLMapper/></requestFlow></transport></deployment>Service StylesAXIS 有四种 service styles,分别是:RPC, Document, Wrapped, and Message 最常用的就是 RPC和Message。RPC :在AXIS中是一个默认选项。当你部署的时候使用下 列两种方式: <service . provider=java:RPC> 或则 <service . style=RPC>,它遵循 SOAP RPC 和编码规 则,就是说它的 WSDL 文件形式就想上面所说的 HelloServicewsForSoap 的 echoString 一样。 每个 RPC 都包括 一个表示名称的外部接点和一些表示参数的内部接点。 AXIS 会根据规则将一个 XML(WSDL 文件)文件转化成一个 JAVA 对象,并对对想赋上在文件中描述的值。也可以根据规则将 一个 JAVA 对象转化成 XML 文件。Document以下列方式部署: <service . style=document><service . style=document> 。适 合于老的 XML schema 。Wrapped以下列方式部署: <service .style=wrapped><service . style=wrapped> 和DOCUMENT 一样,适合于老的 XML schema 。 在大多书情况下,你不许要担心是 DOCUMENT 服务还是 WRAPPED 服务。Message以下列方式部署: <service name=MessageService style=message> 。以这种方式部署的话, 会是 AXIS 失去 意义,它使你的代码真正的用 XML 形式,而不需要转化成 JAVA 对象。以这种方式部署的有以下四种服务方法:public Element method(Element bodies);public SOAPBodyElement method (SOAPBodyElement bodies);public Document method(Document body);public void method(SOAPEnvelope req, SOAPEnvelope resp);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!