`

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>
5
0
分享到:
评论

相关推荐

    WebService axis1.4接口服务序列/反序列复杂项目实例

    webservice axis1.4服务接口请求与响应复杂参数以及自定义实体对象序列化/反序列化、客户端复杂调用等项目实例。

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    ASP EXCEL导入SQL

    而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被认为能以远比XML更好的方式来序列化和传输简单数据结构,而且它更简洁。这对REST是一个极大贡献和补充。  当前的网络应用软件还违背了REST的“无...

    java开源包1

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包11

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包2

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包3

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包6

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包5

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包10

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包4

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包8

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包7

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包9

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包101

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    Java资源包01

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    Python 科学计算

    1.4.4 绘图与可视化 .............................14 1.4.5 图像处理和计算机视觉..............15 第 2 章 NumPy——快速处理数据.......... 16 2.1 ndarray 对象...................................16 2.1.1 ...

Global site tag (gtag.js) - Google Analytics