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
eclipse axis webservice 开发 eclipse下使用axis2 开发webservice系统
Axis 支持传递 Java 对象,包括内部类,作为 WebService 方法的参数或返回值。对象会被序列化为 XML 格式进行网络传输。 ### 7. Handler 和 Chain 特性 Axis 中的 Handler 机制允许自定义处理逻辑,可以实现数据...
Java Axis WebService 开发实例详解 在Java世界中,开发Web服务时,Axis是一个非常流行的开源工具,它允许开发者创建、部署和使用Web服务。本实例将深入探讨如何使用Axis来构建一个简单的Web服务,并进行调用。这个...
在 Axis1.4 中传递复杂类型数组参数,涉及到的是 Web 服务中的数据绑定和消息处理。Axis 是一个开源的 SOAP 库,它允许开发者创建、部署和使用 Web 服务。在处理复杂类型数组时,ArrayMapping 是 Axis 中的一个关键...
而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供了强大的SOAP处理能力。通过整合SpringBoot与Axis,我们可以快速构建高效且易于维护的Web服务。 首先,让我们了解什么是SpringBoot。SpringBoot是...
webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例
在Java世界中,当我们需要通过WebService传递复杂的数据结构时,例如一个对象或javabean,AXIS提供了很好的支持。javabean是一种Java类,遵循特定的命名和设计规则,用于封装数据和提供访问这些数据的方法,它们常...
包装类通常包含一个与自定义类类型相同的属性,并使用基本数据类型作为方法的参数和返回值。然后,在服务端和客户端之间,将自定义类的对象转换为包装类对象,再进行序列化和反序列化。 5. **使用WS-I Basic ...
在本文中,我们将深入探讨Web服务的学习,特别是关于Axis1框架如何处理复杂类型的JavaBean作为参数的传递。...了解这些内容对于开发基于Java的SOAP Web服务至关重要,尤其是当需要传递和处理复杂数据结构时。
标题中的“Axis2 Axis WebService Web 服务”指的是Apache Axis2,它是一个强大的Web服务框架,主要用于构建和部署Web服务。Axis2是Apache SOAP(Simple Object Access Protocol)项目的第二代实现,专门设计用于...
本实例将详细介绍如何使用 Axis 实现 WebService 的服务端和客户端。 ### 1. WebService 基础 WebService 是基于开放标准(如 WSDL、SOAP 和 UDDI)的分布式计算模型,使得不同系统之间的数据交换变得简单。WSDL...
总结,"Axis WebService 实例源码"是一个很好的学习资源,它涵盖了从设置开发环境到实现、部署和测试Web服务的基本步骤。通过深入研究这个实例,开发者可以更好地理解和掌握基于Java的Web服务开发。
- 参数可以是基本类型、List、Map或自定义对象,根据Web Service接口定义。 - 注意线程管理,由于网络操作不应在主线程进行,通常会使用AsyncTask或其他异步机制。 5. **处理返回结果:** - Web Service的响应...
在IT行业中,Axis2是Apache软件基金会开发的一个用于构建Web服务和Web服务客户端的框架,主要基于Java语言。本文将详细讲解如何使用Axis2来发布Web服务以及如何生成客户端代码来调用这些服务。 首先,让我们了解...
这个源码包可能是为了帮助开发者深入理解Axis2的工作原理,或者用于自定义扩展和调试目的。下面我们将详细探讨Axis2 WebService的一些关键知识点。 1. **Web服务基础**:Web服务是一种通过HTTP协议进行通信的应用...
关于标签,“axis2”和“webservice”,这两个标签分别对应了Web服务开发的两个关键元素。Apache Axis2是Web服务的实现框架,而Web服务本身则是一种允许不同系统之间交换数据的标准协议。在Java开发中,Axis2常被...
4. **调用服务**: 使用Stub实例的方法调用远程服务,传递参数并接收返回值。 在实际应用中,为了调用Web服务,我们通常需要引用一系列的Axis2相关的jar包。然而,这些jar包往往数量众多,可能会增加项目的体积。...