`
leo918
  • 浏览: 10259 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Axis webservice 传递自定义类型和接收自定义类型返回值

阅读更多

1、建立web 工程,)引入axis相关jar包,编写webservice服务器端(这里为DataTransService.java)

DataTransService.java

package com.trs.service;

import net.sf.json.JSONObject;
import com.trs.entity.CPDetailResult;
import com.trs.entity.CPListResult;
import com.trs.entity.CPQuery;
import com.trs.entity.ExplainData;

public class DataTransService{

	public String Explain() {
		System.out.println("method Explain() excuted");
		ExplainData explainData = new ExplainData();
		/**测试部分开始...*/
		explainData.setName("TRSSERVER数据库");
		/**测试部分结束...*/
		System.out.println("######## "+explainData.getName());
		/**
		 * 这里完成检索代码
		 */
		String jSonString = objectToJsonString(explainData);
		return jSonString;
	}
	
	public CPListResult GetList(CPQuery q) {
		System.out.println("method GetList() excuted");
		CPListResult listResult = new CPListResult();
		System.out.println("CPQuery DBName: "+q.getDBName());
		listResult.setMessage(q.getDBName());
		/**
		 * 这里完成检索代码
		 */
		String jSonString = objectToJsonString(listResult);
		return listResult;
	}

	public String GetDetail(long detailid){
		System.out.println("method GetDetail() excuted");
		CPDetailResult detailResult = new CPDetailResult();
		/**
		 * 这里完成检索代码
		 */
		String jSonString = objectToJsonString(detailResult);
		return jSonString;
	}
	
	private String objectToJsonString(Object o) {
		//对象转json
		JSONObject jObject = JSONObject.fromObject(o);		
		return jObject.toString();
	}

}
 

2、在工程目录zb_service\WebRoot\WEB-INF目录下新建一个deploy.wsdd文件,文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="DataTransService" provider="java:RPC">
        <parameter name="className" value="com.trs.service.DataTransService"/>
        <parameter name="allowedMethods" value="*"/>
    </service>
</deployment>
 

3、在E:\workspace\zb_service\WebRoot\WEB-INF目录下运行:

java -Djava.ext.dirs=E:\workspace\zb_service\WebRoot\WEB-INF\lib  org.apache.axis.client.AdminClient -lhttp://localhost:8080/zb_service/services/AdminService deploy.wsdd

则在zb_service\WebRoot\WEB-INF目录下会生成一个文件server-config.wsdd,文件内容为:

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <globalConfiguration>
  <parameter name="sendMultiRefs" value="true"/>
  <parameter name="disablePrettyXML" value="true"/>
  <parameter name="adminPassword" value="admin"/>
  <parameter name="attachments.Directory" value="D:\Tomcat6.0\webapps\zb_service\WEB-INF\attachments"/>
  <parameter name="dotNetSoapEncFix" value="true"/>
  <parameter name="enableNamespacePrefixOptimization" value="false"/>
  <parameter name="sendXMLDeclaration" value="true"/>
  <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
  <parameter name="sendXsiTypes" value="true"/>
  <requestFlow>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="session"/>
   </handler>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="request"/>
    <parameter name="extension" value=".jwr"/>
   </handler>
  </requestFlow>
 </globalConfiguration>
 <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
 <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
 <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
 <service name="AdminService" provider="java:MSG">
  <parameter name="allowedMethods" value="AdminService"/>
  <parameter name="enableRemoteAdmin" value="false"/>
  <parameter name="className" value="org.apache.axis.utils.Admin"/>
  <namespace>http://xml.apache.org/axis/wsdd/</namespace>
 </service>
 <service name="DataTransService" provider="java:RPC">
  <parameter name="allowedMethods" value="*"/>
  <parameter name="className" value="com.trs.service.DataTransService"/>
    <!-- 这里定义了方法的参数以及返回值 -->
	 <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"   
	 encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
	 qname="ns:CPQuery"
	 serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
	 type="java:com.trs.entity.CPQuery" xmlns:ns="urn:MyService"/>
	 
	 <typeMapping
	 deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
	 	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
	 qname="ns:CPListResult"    
	 serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"    
	 type="java:com.trs.entity.CPListResult" xmlns:ns="urn:MyService"/>
	 
	 <typeMapping
	 deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
	 	encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
	 qname="ns:CPRecord"    
	 serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"    
	 type="java:com.trs.entity.CPRecord" xmlns:ns="urn:MyService"/>	

 
 </service>
 <service name="Version" provider="java:RPC">
  <parameter name="allowedMethods" value="getVersion"/>
  <parameter name="className" value="org.apache.axis.Version"/>
 </service>
 <transport name="http">
  <requestFlow>
   <handler type="URLMapper"/>
   <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
  </requestFlow>
  <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
  <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
 </transport>
 <transport name="local">
  <responseFlow>
   <handler type="LocalResponder"/>
  </responseFlow>
 </transport>
</deployment>
 

黑体部分为后来加入的设置

 

客户端代码:

package com.trs.client;

import javax.xml.namespace.QName;

import net.sf.json.JSONObject;

import org.apache.axis.Constants;
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;

import com.trs.entity.*;

public class DataTransClient {
	
	//创建访问点
	private static String ENDPOINT = "http://localhost:8080/zb_service/services/DataTransService";
	
	//获取数据库相关说明服务名
	private static String DATAEXPLAIN = "Explain";
	
	//获取数据列表服务名
	private static String GETLIST = "GetList";
	
	//获取数据细缆服务名
	private static String GETDETAIL = "GetDetail";
	
	public void ExplainData(){
	  try{
	   //创建service
	   Service service = new Service();
	   Call call = null;
	   //创建call
	   call = (Call) service.createCall();
	   //设置操作名
	   call.setOperationName(new QName(ENDPOINT,DATAEXPLAIN));
	   //设置访问点
	   call.setTargetEndpointAddress(new java.net.URL(ENDPOINT));
	   //调用服务,返回值
	   String ret = (String) call.invoke(new Object[]{});
	   JSONObject jsObject = JSONObject.fromObject(ret);
	   System.out.println(("name:" + jsObject.getString("name")));
	  }catch (Exception ex){
	   ex.printStackTrace();
	  }
	}
	
	public void getList(CPQuery query){
		try{
		   //创建service
		   Service service = new Service();
		   Call call = null;
		   //创建call
		   call = (Call) service.createCall();
		   QName qName1 = new QName("urn:MyService","CPQuery");
		   QName qName2 = new QName("urn:MyService","CPListResult");
		   QName qName3 = new QName("urn:MyService","CPRecord");
		   //设置操作名
		   call.setOperationName(new QName(ENDPOINT,GETLIST));
		   //设置访问点
		   call.setTargetEndpointAddress(new java.net.URL(ENDPOINT));
		   // 注册序列化和反序列化类
		   call.registerTypeMapping(CPQuery.class, qName1,
				new BeanSerializerFactory(CPQuery.class, qName1),
				new BeanDeserializerFactory(CPQuery.class, qName1));
		   
		   call.registerTypeMapping(CPListResult.class, qName2,
					new BeanSerializerFactory(CPListResult.class, qName2),
					new BeanDeserializerFactory(CPListResult.class, qName2));
		   
		   call.registerTypeMapping(CPRecord.class, qName3,
					new BeanSerializerFactory(CPRecord.class, qName3),
					new BeanDeserializerFactory(CPRecord.class, qName3));

		   //调用服务,返回值
		   CPListResult ret = (CPListResult) call.invoke(new Object[]{query});
		   System.out.println("返回的信息是:" + ret.getMessage()+ret.getRecords()[0].getDetailID());
		  }catch (Exception ex){
		   ex.printStackTrace();
		  }
	}

	public void getDetail(long id){
		try{
		    //创建service
		    Service service = new Service();
		    Call call = null;
		    QName QNAME = new QName(ENDPOINT,GETDETAIL);
		    //创建call
		    call = (Call) service.createCall();
		    //设置操作名
		    call.setOperationName(QNAME);
		    //设置访问点
		    call.setTargetEndpointAddress(new java.net.URL(ENDPOINT));
		    //调用服务,返回值
		    CPDetailResult ret = (CPDetailResult) call.invoke(new Object[]{id});
		    System.out.println("返回的信息是:" + ret);
		   }catch (Exception ex){
		    ex.printStackTrace();
		   }
	}
	
	public static void main(String args[]){
		DataTransClient client = new DataTransClient();
//		client.ExplainData();
		CPQuery query = new CPQuery();
		query.setDBName("oracle");
		client.getList(query);
//		long id = 100;
//		client.getDetail(id);
	}
}

  小结:当自定义类型参数或返回值里含有多个自定义类型对象时,对这些包含的自定义类型对象也如做如上的配置,这样看来,使用比较繁琐。Jeson类给我们提供了一个新的方式,在上面的服务器端代码里,jeson对自定义类型的参数和返回值做了字符串的转换,因此,传递自定义类型变成了传递字符串,我们只需在客户端和服务器端代码里对字符串进行jeson转换就可以了。如:

JSONObject jsObject = JSONObject.fromObject(ret);
	   System.out.println(("name:" + jsObject.getString("name")));
 

 

分享到:
评论

相关推荐

    axis1_4 发布webservice 传递对象或返回对象(一)_benet6_新浪博客.mht

    axis1_4 发布webservice 传递对象或返回对象(一)_benet6_新浪博客.mht

    eclipse axis webservice 开发

    eclipse axis webservice 开发 eclipse下使用axis2 开发webservice系统

    Axis WebService 技术指南,开发文档

    Axis 支持传递 Java 对象,包括内部类,作为 WebService 方法的参数或返回值。对象会被序列化为 XML 格式进行网络传输。 ### 7. Handler 和 Chain 特性 Axis 中的 Handler 机制允许自定义处理逻辑,可以实现数据...

    java axis webservice 开发实例

    Java Axis WebService 开发实例详解 在Java世界中,开发Web服务时,Axis是一个非常流行的开源工具,它允许开发者创建、部署和使用Web服务。本实例将深入探讨如何使用Axis来构建一个简单的Web服务,并进行调用。这个...

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

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

    SpringBoot开发WebService之Axis示例

    而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供了强大的SOAP处理能力。通过整合SpringBoot与Axis,我们可以快速构建高效且易于维护的Web服务。 首先,让我们了解什么是SpringBoot。SpringBoot是...

    webService—Axis实例webService—Axis实例webService—Axis实例

    webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例

    WebService之AXIS传递javabean.7z

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

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

    包装类通常包含一个与自定义类类型相同的属性,并使用基本数据类型作为方法的参数和返回值。然后,在服务端和客户端之间,将自定义类的对象转换为包装类对象,再进行序列化和反序列化。 5. **使用WS-I Basic ...

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

    在本文中,我们将深入探讨Web服务的学习,特别是关于Axis1框架如何处理复杂类型的JavaBean作为参数的传递。...了解这些内容对于开发基于Java的SOAP Web服务至关重要,尤其是当需要传递和处理复杂数据结构时。

    axis2 axis webservice web 服务

    标题中的“Axis2 Axis WebService Web 服务”指的是Apache Axis2,它是一个强大的Web服务框架,主要用于构建和部署Web服务。Axis2是Apache SOAP(Simple Object Access Protocol)项目的第二代实现,专门设计用于...

    Axis实现webservice完整实例

    本实例将详细介绍如何使用 Axis 实现 WebService 的服务端和客户端。 ### 1. WebService 基础 WebService 是基于开放标准(如 WSDL、SOAP 和 UDDI)的分布式计算模型,使得不同系统之间的数据交换变得简单。WSDL...

    Axis WebService 实例源码

    总结,"Axis WebService 实例源码"是一个很好的学习资源,它涵盖了从设置开发环境到实现、部署和测试Web服务的基本步骤。通过深入研究这个实例,开发者可以更好地理解和掌握基于Java的Web服务开发。

    Android axis调用Webservice

    - 参数可以是基本类型、List、Map或自定义对象,根据Web Service接口定义。 - 注意线程管理,由于网络操作不应在主线程进行,通常会使用AsyncTask或其他异步机制。 5. **处理返回结果:** - Web Service的响应...

    axis2发布webservice和调用axis2服务接口

    在IT行业中,Axis2是Apache软件基金会开发的一个用于构建Web服务和Web服务客户端的框架,主要基于Java语言。本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解...

    Axis2WebService 源码

    这个源码包可能是为了帮助开发者深入理解Axis2的工作原理,或者用于自定义扩展和调试目的。下面我们将详细探讨Axis2 WebService的一些关键知识点。 1. **Web服务基础**:Web服务是一种通过HTTP协议进行通信的应用...

    axis2webservice接口例子

    关于标签,“axis2”和“webservice”,这两个标签分别对应了Web服务开发的两个关键元素。Apache Axis2是Web服务的实现框架,而Web服务本身则是一种允许不同系统之间交换数据的标准协议。在Java开发中,Axis2常被...

    axis2客户端调用webService接口,精简jar包

    4. **调用服务**: 使用Stub实例的方法调用远程服务,传递参数并接收返回值。 在实际应用中,为了调用Web服务,我们通常需要引用一系列的Axis2相关的jar包。然而,这些jar包往往数量众多,可能会增加项目的体积。...

Global site tag (gtag.js) - Google Analytics