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")));
分享到:
相关推荐
Axis中传递复杂对象和内部类 Axis中的handler、chain的特性 Axis中处理异常信息 Axis中传递文件信息 Axis常用命令介绍 Axis 提供的工具和调试 Axis 的wsdl生成代码 Axis的Header信息操作 .Net调用Axis出现的问题
webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例
eclipse axis webservice 开发 eclipse下使用axis2 开发webservice系统
1 如何发布自己的webService 2 1.1 即时发布 JWS (Java Web Service) Files - Instant Deployment 2 1.2 定制发布 Custom Deployment - ...3 如何传递javabean和你的对象 14 4 如何抛出自定义异常 18 5 如何传递文件 25
这是一个简单的使用axis进行webservice调用的代码,项目启动后,可以直接用里面的test.java进行测试,无需在做其他操作; 简单易懂,专供新手学习webservice;
WebService之AXIS传递javabean
借鉴网上的资源,弄了一个SpringBoot开发WebService之Axis示例。
axis2 开发 axis webservice web 服务
axis发布webservice教程axis发布webservice教程axis发布webservice教程axis发布webservice教程
这是一个完整的axis例子,怎么实现List。对List的处理应用及配置方法。本代码可以直接运行,有注释
Android 利用axis2 调用webservice 包含j2ee服务端代码和Android客户端代码 代码实现包含 List,map ,对象传递
Axis WebService。Axis WebService。Axis WebService。Axis WebService。
AXIS 客户端调用WebService,供大家分享。
Tomcat+Axis+WebService 入门实例,讲述如何实现WebService的传递信息,
本案例实现使用Axis2生成.arr包发布WebService服务,并使用Axis2生成客户端代码方式调用WebService
axis webservice简单示例。没别的了。
axis webservice axis webservice
一个基于axis的webservice接口例子
axis1_4 发布webservice 传递对象或返回对象(一)_benet6_新浪博客.mht