`

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

相关推荐

    axis自定义数组对象

    - 指定了序列化和反序列化的类名,以及编码风格。 #### 四、总结 本文详细介绍了如何在Axis框架下实现自定义数组对象的处理。通过定义自定义对象类型、实现处理逻辑以及配置服务,可以有效地在Web服务中传递复杂的...

    java学习笔记java学习笔记java学习笔记

    在`转 axis 自定义对象序列化--阿甘正传.htm`中,讨论的是如何将Java对象转换为字节流,以便在网络中传输或持久化存储。这涉及到Java的序列化机制,包括实现Serializable接口,以及自定义序列化逻辑。 4. **Oracle...

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

    在这个"WebService Axis1.4接口服务序列/反序列复杂项目实例"中,我们将深入探讨如何在 Axis1.4 中处理复杂的参数、自定义实体对象的序列化与反序列化,以及客户端的复杂调用。 首先,让我们理解序列化和反序列化的...

    axis2_demo实战 复杂对象传输 文件传输

    Axis2支持对象序列化和反序列化,使得对象可以被转换为XML格式在网络间传输,然后在接收端反序列化回对象。这对于跨系统的业务对象交换非常有用。 接着,"传文件"是Web服务中一个重要的应用场景。在Axis2中,可以...

    webservice之axis实例,axis复杂对象

    在Web服务中,有时我们需要传递更复杂的数据结构,如自定义对象或数组。Axis支持这种复杂类型的序列化和反序列化。我们需要确保这些对象正确实现了`Serializable`接口,并且在WSDL中定义了它们的XML Schema数据类型...

    Axis2范例,对象传输

    Axis2支持Java对象到XML的自动序列化和反序列化,这使得开发者无需手动处理XML编码和解析。 3. **bean与XML相互转化**:JavaBean是Java中常用的数据载体,它能被转化为XML用于数据交换。Axis2提供了便利的工具和API...

    axis web services 例子

    5. **XMLBeans或JAXB**:Apache Axis可以使用XMLBeans或JAXB(Java Architecture for XML Binding)进行对象到XML的映射,理解这两种技术的工作原理对于处理自定义类的序列化至关重要。 6. **SOAP绑定**:理解如何...

    WebService中使用自定义类的五种解决方法

    在这种情况下,需要使用如Apache CXF、Axis2等Web服务框架,它们提供了一套工具和服务描述语言(WSDL)来处理自定义类的序列化。 每种方法都有其适用场景和优缺点。例如,JAXB和SOAP更适合企业级的、强类型的服务,...

    AXIS2接口依赖jar包

    6. **序列化与反序列化**:AXIS2使用XMLBeans或Aegis库进行对象到XML的序列化和反序列化,这是在处理SOAP消息时的关键步骤。 7. **模块系统**:AXIS2的模块系统允许用户插入自定义的功能,如安全、事务管理等,以...

    axis2-1.6.4源码

    5. **序列化与反序列化(Serialization & Deserialization)**:Axis2 使用Axiom(抽象XML消息对象模型)处理XML消息的序列化和反序列化。源码分析有助于理解数据如何在SOAP消息和Java对象间转换。 6. **部署...

    axis1.2 开发指南

    - **编码您的 Beans**:介绍了如何使用 Bean 序列化功能来编码 Java 对象。 - **当 Beans 不够时 - 自定义序列化**:如果默认的序列化机制不能满足需求,可以使用自定义序列化来实现更复杂的需求。 #### 八、使用 ...

    axis复杂类型axis复杂类型

    这个类实现了`Serializable`接口,这是因为在Web服务中,对象需要能够被序列化和反序列化以便在网络间传输。`Student`类包含了三个私有属性:`_name`、`_id`和`_comment`,以及相应的getter和setter方法。 接着,...

    axis2 包括源码 文档

    源码包含了许多模块,如核心引擎、传输层、消息处理、序列化和反序列化等。通过对源码的学习,开发者可以更好地理解 Axis2 如何处理SOAP消息,如何实现服务的生命周期管理,以及如何与其他Web服务框架互操作。 最后...

    axis包最完整版包括axis.jar和axis-scheme.jar等

    在Web服务上下文中,它支持SOAP消息中的对象激活和序列化。 4. **axis-ant.jar**:这个库文件包含了Ant任务,Ant是Apache的构建工具,用于自动化Java项目构建过程。axis-ant.jar让开发者可以利用Ant脚本来执行Axis...

    org.apache.axis jar

    6. **类型映射**:Axis支持自动的Java类型到SOAP数据类型的映射,使得数据在传输过程中能够保持类型一致性,同时处理XML数据的序列化和反序列化。 7. **扩展与插件**:Apache Axis有一个强大的插件系统,允许开发者...

    axis2_source

    Axis2深度集成SOAP处理,包括解析、序列化和处理SOAP消息。源码解析有助于理解SOAP消息的生命周期和处理流程。 6. **WSDL处理**: Axis2能够根据WSDL文件自动生成服务代码,源码里可以看到WSDL解析器的工作原理。...

    axis_1.4 api文档

    7. **数据绑定**:Axis 1.4支持数据绑定技术,如JAXB(Java Architecture for XML Binding),可以将XML Schema映射到Java类,简化了XML数据的序列化和反序列化。 8. **模块与扩展**:Axis 1.4支持模块系统,允许...

    axis2 1.4 API HTML版

    Axis2 1.4版本在性能上做了很多优化,包括缓存机制、多线程处理和高效的序列化/反序列化策略,以应对高负载和大规模服务场景。 9. **扩展性** Axis2允许通过编写自定义模块和扩展点来扩展其功能。开发者可以创建...

    Axis2_Code_Generator.zip

    3. 生成的代码:通常包括服务端的Stub(存根类)和客户端的Skeleton(骨架类),这些类负责处理SOAP消息的序列化和反序列化。 4. 部署服务:将生成的服务端代码部署到Axis2服务器上,使其可以接受和响应Web服务请求...

    Webservice axis 整理好的示例文档

    在Web服务接口中,这些复杂对象可以通过XML Schema(XSD)来定义,然后由Axis自动处理序列化和反序列化的过程,使得客户端和服务器之间能够顺利交换数据。 4. **RMI (Remote Method Invocation) 远程调用**:RMI是...

Global site tag (gtag.js) - Google Analytics