`

axis 之 传递复杂类型

阅读更多
从客户端除了传递字符串以外还可以传递复杂对象(对象必须序列化了),List,Map,数组和文件。

(1)定义一个对象实现了serializable 接口
package cn.com.chenlly.ssh.webservice.axis;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @Class Address.java
* @Description 
* @Copyright (c) 2010, 正辰科技有限公司 All rights reserved.
* @Author Chenlly 
* @Version 1.0
* @Date Apr 19, 2010 5:03:23 PM
*/
public class Address implements Serializable {

private Integer identifier;

private String address;

private String city;

private String province;

private String country;

private String []array;

private List<Integer> list;

private boolean isExst;


//constructor
public Address(){
 
  list = new ArrayList<Integer>();
 
  list.add(1);
 
  list.add(2);
 
  list.add(3);
}
public Integer getIdentifier() {
  return identifier;
}
public void setIdentifier(Integer identifier) {
  this.identifier = identifier;
}
public String getAddress() {
  return address;
}
public void setAddress(String address) {
  this.address = address;
}
public String getCity() {
  return city;
}
public void setCity(String city) {
  this.city = city;
}
public String getProvince() {
  return province;
}
public void setProvince(String province) {
  this.province = province;
}
public String getCountry() {
  return country;
}
public void setCountry(String country) {
  this.country = country;
}
public String[] getArray() {
  return array;
}
public void setArray(String[] array) {
  this.array = array;
}
public List<Integer> getList() {
  return list;
}
public void setList(List<Integer> list) {
  this.list = list;
}
public boolean isExst() {
  return isExst;
}
public void setExst(boolean isExst) {
  this.isExst = isExst;
}
}
(2)定义server-config.wsdd文件
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="URLMapper"
  type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="wsTestHandler"
  type="java:cn.com.chenlly.ssh.webservice.axis.WSTestServiceHandle">
  <parameter name="status" value="success" />
</handler>
<!-- 自定义服务 -->
<service name="ws" provider="java:RPC">
  <parameter name="className"
   value="cn.com.chenlly.ssh.webservice.axis.WSTestServiceImpl" />
  <parameter name="allowedMethods" value="*" />
  <parameter name="scope" value="request" />
 
  <responseFlow>
   <handler type="wsTestHandler" />
  </responseFlow>
 
  <requestFlow>
   <handler type="wsTestHandler" />
  </requestFlow>
 
  <beanMapping qname="myNSD:Address"
   xmlns:myNSD="urn:AddressManager"
   languageSpecificType="java:cn.com.chenlly.ssh.webservice.axis.Address">
  </beanMapping>
</service>
<transport name="http">
  <requestFlow>
   <handler type="URLMapper" />
  </requestFlow>
</transport>
</deployment>
//主要是<beanMapping>标签中名字空间和qname写法
第一个你自定义的命名空间和第二个节点本地部分会组成一个新的QName。
在IE 中打开链接
http://192.168.1.98:8082/SSHProject/services/ws?wsdl
生成的WSDL有如下一段
- <schema targetNamespace="urn:AddressManager" xmlns="http://www.w3.org/2001/XMLSchema">
  <import namespace="http://192.168.1.98:8082/SSHProject/services/ws" />
  <import namespace="http://xml.apache.org/xml-soap" />
  <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <complexType name="Address">
- <sequence>
  <element name="address" nillable="true" type="soapenc:string" />
  <element name="array" nillable="true" type="impl:ArrayOf_soapenc_string" />
  <element name="city" nillable="true" type="soapenc:string" />
  <element name="country" nillable="true" type="soapenc:string" />
  <element name="exst" type="xsd:boolean" />
  <element name="identifier" nillable="true" type="soapenc:int" />
  <element name="list" nillable="true" type="impl:ArrayOf_xsd_anyType" />
  <element name="province" nillable="true" type="soapenc:string" />
  </sequence>
  </complexType>
  </schema>
这个新的schema就是把对象序列化以后生成了xml流文件。
(3) webService 服务方法
public Address dealAddress(Address address) {
   System.out.println("service exst:"+address.isExst());
   //客户端对象传递过来设置标志为true
   address.setExst(true);
   return address;
}
(4) 客户端
package cn.com.chenlly.ssh.webservice.axis;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
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;
/**
* @Class WSTestService.java
* @Description 客户端调用远程的service
* @Copyright (c) 2010, 正辰科技有限公司 All rights reserved.
* @Author Chenlly
* @Version 1.0
* @Date Apr 9, 2010 3:57:26 PM
*/
public class WSTestServiceClient {
public static void main(String[] args) {
  Service service = new Service();
  try {
   Call call = (Call) service.createCall();
   String url = "http://192.168.1.98:8082/SSHProject/services/ws?wsdl";
   call.setTargetEndpointAddress(new java.net.URL(url));
                        //定义对象
   Address address = new Address();
   address.setIdentifier(1);
   address.setProvince("湖南");
   address.setCity("长沙");
   address.setExst(false);
   QName qn = new QName("urn:AddressManager", "Address");//第一个参数名字空间URI,第二个参数本地部分,注意这两部分在server-config.wsdd文件中标签beanMapping配置
   call.registerTypeMapping(Address.class, qn,
     new BeanSerializerFactory(Address.class, qn),//序列化
     new BeanDeserializerFactory(Address.class, qn));
  
   call.setOperationName(new QName(url,"dealAddress"));
  
   call.addParameter("arg0", qn, ParameterMode.IN);//定义一个参数类型,如果是String类型的参数可以不需要这句话
   call.setReturnClass(Address.class);//指定返回类型
  
   Address result = (Address) call.invoke(new Object[]{address});//这里传递给service的是一个对象
   System.out.println(result.isExst());
  } catch (Exception e) {
   e.printStackTrace();
  }
}
}
//在服务器端打印的isExst()方法是false;然后设置address的exst为true;最后又传送到客户端打印的result结果为true
分享到:
评论

相关推荐

    在axis1.4中传递复杂类型数组参数(ArrayMapping)

    在 Axis1.4 中传递复杂类型数组参数,涉及到的是 Web 服务中的数据绑定和消息处理。Axis 是一个开源的 SOAP 库,它允许开发者创建、部署和使用 Web 服务。在处理复杂类型数组时,ArrayMapping 是 Axis 中的一个关键...

    webServices学习之二——axis1传递复杂类型javabean

    总结一下,"webServices学习之二——axis1传递复杂类型javabean"这篇文章可能会详细讲解如何使用Axis1框架处理JavaBean对象,包括创建JavaBean、生成WSDL、部署服务以及客户端调用等步骤。了解这些内容对于开发基于...

    axis复杂类型axis复杂类型

    在本例中,我们将讨论如何使用Axis-1.1版本在Java环境中处理这些复杂类型,实现Web服务的调用。 首先,我们创建一个名为`Student`的JavaBean类,它代表了一个学生的复杂类型。这个类实现了`Serializable`接口,这是...

    webservice之axis实例,axis复杂对象

    Axis支持这种复杂类型的序列化和反序列化。我们需要确保这些对象正确实现了`Serializable`接口,并且在WSDL中定义了它们的XML Schema数据类型。 4. **部署Web服务**: 创建并编译好服务代码后,我们需要将其部署到...

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

    本实战案例将关注使用Axis2进行复杂对象传输以及文件传输,特别是如何通过Web服务来传递列表(List)、对象(Object)和文件。 首先,让我们深入理解`axis2 Demo`。Axis2 提供了一个强大的开发和部署环境,它支持多种...

    WebService之AXIS传递javabean.7z

    在Java世界中,当我们需要通过WebService传递复杂的数据结构时,例如一个对象或javabean,AXIS提供了很好的支持。javabean是一种Java类,遵循特定的命名和设计规则,用于封装数据和提供访问这些数据的方法,它们常...

    Axis2jar包+eclipse3.5插件+测试源代码(一般类型和复杂类型对象)+插件详细使用方法

    3. **测试源代码**:提供的测试源代码分为“一般类型”和“复杂类型对象”,这通常意味着代码涵盖了基本数据类型的服务调用示例,以及可能包含嵌套结构或自定义数据类型的复杂对象交互。这些示例对于学习如何处理...

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

    在处理这些参数时,需要确保类型匹配,以及在客户端和服务器端之间正确传递数据。 3. **客户端调用**:为了测试和使用这些服务,开发者需要编写客户端代码来发起请求并处理响应。这通常涉及创建一个Service代理对象...

    WebService之Axis2经典教程

    - **复合类型数据的传递**: Axis2支持传递复杂的Java对象,例如自定义类实例。 - **会话管理**: 支持会话管理功能,可以跟踪客户端的请求序列。 - **异步调用**: 提供异步调用的能力,支持回调通知。 - **模块化**: ...

    Axis2学习教程-全面学习AXIS

    课程内容包括了Axis2的基础知识讲解,如以多种方式编写和发布WebService、JAX-RPC、JAX-WS的使用、复杂类型的传输、WebService会话管理和Axis2模块等关键概念。此外,教程通过三个实际项目加深理解,涵盖了使用Java ...

    WebService大讲堂之Axis2(2):复合类型数据的传递.pdf

    总结,本篇内容主要讲解了如何在 Axis2 中处理复合类型数据的传递,包括数组(一维和二维)以及自定义类对象。通过 Axis2,开发者可以直接使用 Java 类型作为 WebService 方法的参数和返回值,简化了开发过程。同时...

    axis自定义数组对象

    - **优势:** 简化了Web服务的创建和调用过程,支持多种数据类型,包括自定义的复杂类型。 #### 三、示例代码分析 为了更好地理解如何在Axis框架下使用自定义数组对象,我们将通过一个具体的示例来逐步解析其工作...

    org.apache.axis jar

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

    Java+Axis2调用Web Services 网络接口

    - 示例4:可能使用了复杂类型或数组作为参数,展示了如何序列化和反序列化这些数据。 5. **详细注释**: 代码中的注释对于理解每个步骤至关重要。它们会解释代码的目的,如何工作,以及可能出现的问题。例如,...

Global site tag (gtag.js) - Google Analytics