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")));
分享到:
相关推荐
"传Object"是指在Web服务接口中可以传递自定义的Java对象。Axis2支持对象序列化和反序列化,使得对象可以被转换为XML格式在网络间传输,然后在接收端反序列化回对象。这对于跨系统的业务对象交换非常有用。 接着,...
Axis支持传递复杂对象和内部类作为参数或返回值。在服务端,需要确保这些类具有正确的序列化和反序列化实现,以便在客户端和服务器之间正确地传输数据。 **五、Handler和Chain特性** Handler是Axis中的一个关键...
总结,本篇内容主要讲解了如何在 Axis2 中处理复合类型数据的传递,包括数组(一维和二维)以及自定义类对象。通过 Axis2,开发者可以直接使用 Java 类型作为 WebService 方法的参数和返回值,简化了开发过程。同时...
1. **复合类型数据**:在实际应用中,除了基本数据类型(如int, String等)外,我们还需要传递更复杂的结构,如数组和自定义对象。在Axis2中,可以直接使用Java的数组或自定义类(接口)作为WebService方法的参数或...
综上所述,Axis2 提供了一种灵活且强大的方式来构建和管理 WebService。无论是简单的 POJO 类发布还是复杂的跨服务会话管理,Axis2 都能够提供全面的支持。这对于企业级应用来说非常重要,因为它不仅降低了开发...
接下来,我们看一个简单的示例,展示如何调用.NET WebService的`GetSafeMode`方法并传递参数及接收返回值: ```java @WebMethod public string GetSafeMode(string factoryId, string simId) { ……. return “0...
// 当返回值为其他类型如自定义类型、Map、List 等时,将其序列化后返回 public byte[] test4(String arg) { Map, Object> map = new HashMap(); map.put("测试", arg); try (ByteArrayOutputStream baos = ...
参数是用来传递信息的变量,它们可以是基本类型(如字符串、整数、浮点数等)或者复杂类型(如自定义的对象)。返回值则是服务执行操作后返回的结果,同样可以是基本类型或复杂类型。 在这个简单的例子中,我们可能...
- 方法定义、参数传递和返回值。 - 方法重载和递归。 ##### 第三章 Java类和对象 - **类的概念** - 类是对象的蓝图,定义了一组相似对象的共同特征。 - **对象实例化** - 如何创建类的实例对象。 - 对象的引用...