- 浏览: 484497 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (301)
- Swing技术 (1)
- Linux (1)
- Javascript (22)
- 数据结构和算法 (3)
- J2SE (36)
- workflow (5)
- 设计模式 (14)
- web service (19)
- Ajax (14)
- 中间件 & 服务器 (8)
- 多线程 (9)
- Oracle (52)
- sys & soft (10)
- JMS (3)
- sso (9)
- android (11)
- struts2 (10)
- web协议 (2)
- 分布式 (2)
- PM (2)
- OLAP (3)
- Redis (2)
- Hibernate (7)
- ibatis (2)
- SQLServer (1)
- maven (3)
- Spring (7)
- Jsp (2)
- slf4j (1)
- jQuery (15)
- 权限 (1)
- 系统集成 (1)
- 笔记 (1)
- Freemarker (2)
- 项目管理 (1)
- eclipse (3)
- GIS (1)
- NoSql (3)
- win10 (1)
- win10网络 (2)
- 底层 (3)
- 数据库 (0)
最新评论
-
kabuto_v:
请问那种图,uml图是怎么画出来的呢?是您自己手工画的,还是有 ...
FastJSON 序列化、反序列化实现 -
梦行Monxin商城系统:
电商实例、业务并发、网站并发及解决方法 -
rockethj8:
client 㓟有一个参数是可以忽略一些URL 不进行验证登录 ...
SSO 之 (单点登录)实施中遇到的几个问题 -
mengxiangfeiyan:
好啊。。。。。
Oracle删除表,删除数据以及恢复数据、利用现有表创建新表
从客户端除了传递字符串以外还可以传递复杂对象(对象必须序列化了),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
(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
发表评论
-
rest 之 主题笔记
2014-03-22 09:59 7671、Web 服务主要有三种形式:SOAP、REST 和 RPC ... -
架构Web Service 之 描述与注册,发布Web服务
2013-06-12 19:31 0架构Web Service: 描述与注 ... -
soap wsdl
2013-06-12 19:29 0Web Service概述 Web Service的定义 ... -
Axis2 之 开发Java Web服务
2013-06-12 19:28 0概述 本文介绍了一个比较简单实用的基于Java的S ... -
Axis2 之 利用JiBX把XML转换Web服务
2013-06-12 19:18 0[ http://blog.csdn.net/phantomh ... -
AXIS2 之 Axis序列化/反序列化器开发指南
2013-06-12 19:15 0薛谷雨 rainight@126.com 联系。 http:/ ... -
Axis2 之 复合类型数据的传递
2013-06-12 18:50 0axis2开发指南 http://www.360doc.com ... -
Axis 之 soap wsdl
2013-06-12 18:01 0http://www.mohappy.com/blog/use ... -
Axis1.4
2013-06-12 17:58 0http://www.blogjava.net/xiaodao ... -
Axis 之 开发详细注释
2013-06-12 17:55 0http://www.360doc.com/content/1 ... -
Axis 之 WebService测试,开发,部署
2013-06-12 17:52 0带抓图的word文档在:http://618119.com/d ... -
Axis 之 axis三种开发方式
2013-06-12 17:43 1442Tomcat+Axis+Eclipse实例讲解 一、 ... -
在AXIS服务间传递JavaBean及其安全解决
2013-06-12 17:17 2565-------------------1、AXIS学习笔记-- ... -
web Service客户端调用
2013-06-12 16:30 0客户端调用 目前我用了2种调用方法 Client.java p ... -
利用HttpURLConnection实现SOAP调用
2013-05-26 21:42 6229我们完全可以利用J2SE中 ... -
WebService总结1
2012-09-28 23:31 1123web service大致有三 ... -
JAVA中三种WebService规范及底层实例
2012-09-28 23:19 3696http://www.360doc.com/conte ... -
WebService大讲堂系列之Axis2
2012-09-28 01:28 929http://www.360doc.com/conte ... -
Axis2+wsdl2java.bat生成客户端调用
2012-09-28 00:45 27569http://www.360doc.com/c ... -
使用Eclipse的Axis1.4插件开发Web Service及客户端
2012-09-27 23:47 920http://www.360doc.com/conte ...
相关推荐
NULL 博文链接:https://conkeyn.iteye.com/blog/1010959
axis复杂类型axis复杂类型axis复杂类型axis复杂类型
NULL 博文链接:https://yehao0716.iteye.com/blog/1542231
WebService之AXIS传递javabean
WebService之axis的复杂对象传输方案
用两个工程模拟实现远程调用对方用webservice提供的接口,并有传送复杂对象数据的例子。
axis1_4 发布webservice 传递对象或返回对象(一)_benet6_新浪博客.mht
Axis中传递复杂对象和内部类 Axis中的handler、chain的特性 Axis中处理异常信息 Axis中传递文件信息 Axis常用命令介绍 Axis 提供的工具和调试 Axis 的wsdl生成代码 Axis的Header信息操作 .Net调用Axis出现的问题
axis2实现WebService之复合类型数据的传递.doc
myeclipse6.0 jdk1.4 weblogic8.1下测试通过
axis2_demo实战 复杂对象传输 文件传输 webservice实例 传List ,传Object 传对象,传文件 各种实战。 有备注说明whdd
插件安装在eclipse3.5使用没有问题。其它IDE没有测试过来。 Axis2jar包+war包+eclipse3.5插件+测试源代码(一般类型和复杂类型对象)+插件详细使用方法
WebService大讲堂之Axis2(2):复合类型数据的传递.pdfWebService大讲堂之Axis2(2):复合类型数据的传递.pdf
axis 自定义 数组 对象复杂类型的精华所在
axis1.4和axis2相关jar文件,axis1.4和axis2相关jar文件
axis 1.x与axis2.x开发 以及jar
借鉴网上的资源,弄了一个SpringBoot开发WebService之Axis示例。
Axis2是目前比较流行的WebService引擎。...本课程站在初学者角度介绍了Axis2的大多数常用的功能,例如,以多种方式编写和发布WebService、JAX-RPC、JAX-WS、复杂类型传输、WebService会话管理、Axis2模块等
WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2
准备一个Web Server,基本上所有主流的Web Server都可以,为了节省资源,我使用Tomcat5.5.23来讲解这个例子,大家可以自行到Apache网站上下载该版本的Tomcat