几天前只对其WebService传输简单数据类型进行了一些尝试。本次项目中将设计到如对象在内的复杂类型的传输,几天前的知识点显然不够,经过两天的翻看资料和赵家志等人的帮助,终于对WebService传输复杂数据类型的相关知识,或者说是步骤有了一些认识。以下演示的就是从客户端传一个GoVO对象到服务端,服务端经过处理,把数据封装成一个GoPO对象传到客户端,当然实际项目中没有这么简单,为了让自己不便于以后的知识点重构上有较大障碍,所以写下以下文字,希望从糟粕中提练精华。
首先,在服务端程序中编写提供服务的接口,以及接口中方法要调用或要返回的javabean对象(必须序列化),当然还有实现接口的类,不过不用写具体处理过程。
<o:p> </o:p>
package com.interfacepackge;<o:p></o:p>
public interface ServerProtInterface {<o:p></o:p>
public GoPO getElement(GoVO vo);}<o:p></o:p>
|
import java.io.Serializable;<o:p></o:p>
public class GoPO implements Serializable{<o:p></o:p>
private static final long serialVersionUID = 5292943075702291483L;<o:p></o:p>
private String add;<o:p></o:p>
public String getAdd(){return add;}<o:p></o:p>
public void setAdd(String add){this.add = add;}<o:p></o:p>
}<o:p></o:p>
|
import java.io.Serializable;<o:p></o:p>
public class GoVO implements Serializable{<o:p></o:p>
private static final long serialVersionUID = -8563449093441945059L;<o:p></o:p>
private String title;<o:p></o:p>
public String getTitle() {return title;}<o:p></o:p>
public void setTitle(String title) {this.title = title;}<o:p></o:p>
}<o:p></o:p>
|
public class ServiceProtInterfaceImpl implements ServiceProtInterface {<o:p></o:p>
public GoPO getElement(GoVO vo) {<o:p></o:p>
return null;<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
|
<o:p> </o:p>
然后把包含有接口和bean对象的文件拷贝到AXIS目录下的WEB-INF目录下,使用如下指令:(是一句命令!!)
<o:p> </o:p>
java -Djava.ext.dirs=lib org.apache.axis.wsdl.Java2WSDL -o temp.wsdl –l "http://localhost:8090/axis/services/WS_UP_OBJ" -n "urn:WS_UP_OBJ" -p"com.lovo.upobj,com.lovo.upobj.po" "urn:WS_UP_OBJ" com.lovo.upobj.bo.UpObjIface<o:p></o:p>
|
<o:p> </o:p>
//WS_UP_OBJ 是 web service 的服务名,8090 是web服务的端口 ,WS_UP_OBJ可以修改为你自己定义的web service 的服务名
//com.lovo.upobj,com.lovo.upobj.po 接口中方法要调用或要返回的javabean对象
//com.lovo.upobj.bo.UpObjIface 为服务端 接口
运行上述命令 后,在当前目录可以得到 temp.wsdl 服务描述文件
<o:p> </o:p>
2:有了temp.wsdl服务描述文件,就可以使用它来生成JAX-RPC 的框架,这个框架使得我们编程变得简单,在AXIS目录下的WEB-INF子目录,使用以下的命令就可以生成这个框架:(也是一句命令哦!!)
<o:p> </o:p>
java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true -Nurn:WS_UP_OBJ com.lovo.upobj.bo temp.wsdl<o:p></o:p>
|
<o:p> </o:p>
//WS_UP_OBJ 是 web service 的服务名,com.lovo.upobj.bo 为服务端 接口 UpObjIface 所在的包
<o:p> </o:p>
使用这个命令后将 在 包含有接口和bean对象的文件 中 生成以下新文件:
<o:p> </o:p>
*Interface.java:新的*Interface接口,它扩展了java.rmi.Remote接口;(客户端要用)
*InterfaceService.java:客户端服务接口,用来获得*Interface对象的引用;(客户端要用)
*InterfaceServiceLocator.java:在客户端使用,主要用来服务定位;(客户端要用)
*SoapBindingImpl.java:服务端实现类,它实现了*Interface接口,服务端的业务方法实现代码就在这里编写;
*SoapBindingSkeleton.java:服务端Skeleton;
*SoapBindingStub.java:客户端Stub;(客户端要用)
GoVO.java:新的GoVO序列化对象;(客户端要用)-
GoPO.java:新的GoVO序列化对象;(客户端要用)
deploy.wsdd:部署这个Web服务的脚本;
undeploy.wsdd:卸载这个Web服务的脚本。
|
<o:p> </o:p>
然后可以摒弃我们刚才写的那些代码,把以上生成的框架拷贝到我们的工程中。并在*SoapBindingImpl.java编写服务端的业务方法实现代码;
<o:p> </o:p>
然后在***SoapBindingStub.java 文件 的对应位置添加如下代码:(目的是把我们在传输过程中使用的传输对象进行注册。以便它以流的方式传输。)
<o:p> </o:p>
QName qn = new QName( "OO", "OO");
_call.registerTypeMapping(com.interfacepackge.GoPO.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(com.interfacepackge.GoPO.class, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(com.interfacepackge.GoPO.class, qn));
QName qn1 = new QName( "OO", "OO");
_call.registerTypeMapping(com.interfacepackge.GoVO.class, qn1,
new org.apache.axis.encoding.ser.BeanSerializerFactory(com.interfacepackge.GoVO.class, qn1),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(com.interfacepackge.GoVO.class, qn1));
|
<o:p> </o:p>
接着,把编译后的服务端程序的class文件连同完整的包目录 拷贝到服务器相应部署目录下的 AXIS\WEB-INF\class子目录。
然后开始部署(此处需要把deploy.wsdd拷贝到WEB-INF目录下)
在控制台中,转到AXIS\WEB-INF,执行以下的命令就可以完成部署
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8090/axis/services/AdminService deploy.wsdd<o:p></o:p>
|
<o:p> </o:p>
OK,服务端完成了,接着我们需要干的是编写我们的客户端代码,在这之前需要把前面标有“客户端要用”的类的类文件打包,以便我们客户端导入。
客户端程序为:(需要导入AXIS引擎中lib里所有的jar文件)
public class ClientText {
public static void main(String [] args){
GoVO vo = new GoVO();
vo.setTitle("丁一郎");
ServerProtInterfaceServiceLocator locator = new ServerProtInterfaceServiceLocator();
ServerProtInterface inter;
try {
inter = locator.getWS_UP_OBJ ();
GoPO po = inter.getElement(vo);
System.out.println(po.getAdd());
} catch (ServiceException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (RemoteException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
|
<o:p> </o:p>
如果要远程调用此WebService,则应该把ServerProtInterfaceServiceLocator.源文件的URL地址改为IP地下。
private java.lang.String /WS_UP_OBJ _address = "http://localhost:8080/axis/services//WS_UP_OBJ ";
|
<o:p> </o:p>
这样就可以实现对远程访问了。以上客户端运行结果为:
<o:p> </o:p>
以上为WebService传输复杂数据类型,主要是通常三条命令来完成,其间生成的框架为我们的开发做了很多实质性的东西,至此WebService可以说是入门了吧!
分享到:
相关推荐
【WebService2 符合数据类型】指的是在开发基于Web Service的应用时,支持各种复杂数据类型的传输。Web Service是一种基于XML的通信标准,允许不同系统之间交换数据。在Axis2这个流行的Java Web Service框架中,可以...
...WebService是一种通过网络进行通信的软件系统,遵循标准的协议和规范,如SOAP(Simple Object Access Protocol)和REST...理解这些概念和技术对于构建能够可靠传输复杂数据的PHP WebService至关重要。
1. 数据类型兼容性:确保目标语言和源语言之间的数据类型匹配,例如日期格式、数字表示等。 2. 循环引用:如果对象图中存在循环引用,序列化器可能陷入无限循环,需要特别处理。 3. 自定义序列化和反序列化逻辑:...
使用webservice传输xml数据(重点掌握) 第二天: Jaxws的深入开发: 常用注解 测试jaxws传输复杂对象类型 CXF开发webservice: CXF入门程序 Spring+cxf整合(重点) CXF发布rest的webservice。(重点)...
在IT行业中,Web服务是一种通过网络提供和使用应用程序接口(API)的方式,它允许不同的系统之间交换数据。...通过研究提供的代码和理解其背后的原理,你可以掌握如何在实际项目中处理复杂数据类型的Web服务调用。
3. **WSDL(Web服务描述语言)**:定义Web服务接口时,WSDL文档会包含服务的输入和输出数据类型。如果数据类型是集合,WSDL需要正确地描述这些类型,以便客户端能够生成对应的代理类。 4. **Wsdl.exe或SvcUtil.exe*...
对于复杂的业务场景,往往需要在客户端和服务端之间传输复杂的Java对象,这就涉及到如何在WebService中正确地序列化和反序列化这些复杂对象的问题。本文将详细介绍如何使用Apache Axis框架来实现复杂对象的传输。 #...
对于基本数据类型的传递,ksoap2库提供了一个简单的方法。你可以直接将这些值作为参数传递给WebService,同时也可以作为返回值接收。例如,如果你有一个获取用户ID的WebService方法,可以这样在Android端调用: ```...
总的来说,提高.NET WebService在大数据量下的性能涉及多个层面,包括数据结构选择、传输优化、并行处理、数据库优化等。通过综合运用这些策略,可以有效地减轻服务器负载,提升用户体验。对于具体项目,应根据实际...
在`axis2_demo`项目中,我们将看到如何创建和调用Web服务,以实现不同类型的数据传输。在描述中提到的"传List",意味着我们可以传递Java集合,如ArrayList或LinkedList等,作为Web服务的参数。这使得Web服务能够处理...
- `<s:complexType/>` 表示该元素的数据类型是一个复杂的类型,但具体定义未给出。 - `<s:element name="getRegionDatasetResponse">` 定义了一个响应元素 `getRegionDatasetResponse`。 - `...
2. **XML的运用**:WebService主要通过XML(Extensible Markup Language)来封装和传输数据。XML是一种结构化的文本格式,能够清晰地表示复杂的数据结构,并且易于解析和生成。使用XML作为数据交换格式使得...
在本文中,我们将深入探讨WebService的核心概念、工作原理、数据传输与同步的相关知识点。 一、WebService概述 WebService是一种基于XML(Extensible Markup Language)标准的技术,它通过SOAP(Simple Object ...
5. **复杂数据类型Service接口示例**: 在实际应用中,往往需要处理复杂的对象模型。此示例展示了如何定义和操作包含自定义对象的服务接口。开发者可以通过定义Java类来表示复杂数据结构,并在服务接口中使用这些类...
相比于HTTP接口,WebService接口更注重标准和规范,能处理复杂的数据类型,并且可以在不同操作系统和编程语言之间无缝通信。然而,由于其XML编码的复杂性和较高的开销,WebService在效率上可能不如HTTP接口。 在...
它通过HTTP协议传输数据,使用SOAP(Simple Object Access Protocol)作为消息格式,WSDL(Web Services Description Language)用于描述服务接口,UDDI(Universal Description, Discovery, and Integration)则...
本资源"WebService传递对象与集合问题.rar"显然关注的是在Web Service中如何有效地传递复杂数据类型,如对象和集合。 在传统的Web Service中,数据通常通过XML格式进行传输,这是SOAP消息的基础。然而,直接传递...
1. **自定义实体对象**:开发者可能创建了自己的Java类来表示业务逻辑中的复杂数据结构。这些类需要被序列化成XML以便在Web服务请求和响应中传输。Axis1.4提供了一种机制,通过JAXB(Java Architecture for XML ...
- 可以定义复杂的数据类型,提高服务的灵活性。 ##### 4. UDDI (Universal Description, Discovery and Integration) - **概念**:UDDI 是一个用于注册、发现和集成 WebService 的目录服务。 - **作用**: - 为 ...