`
14489130
  • 浏览: 5093 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

WebService传输复杂数据类型

阅读更多
  几天前只对其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 符合数据类型

    【WebService2 符合数据类型】指的是在开发基于Web Service的应用时,支持各种复杂数据类型的传输。Web Service是一种基于XML的通信标准,允许不同系统之间交换数据。在Axis2这个流行的Java Web Service框架中,可以...

    PHP webservice传输附件和文章源码

    ...WebService是一种通过网络进行通信的软件系统,遵循标准的协议和规范,如SOAP(Simple Object Access Protocol)和REST...理解这些概念和技术对于构建能够可靠传输复杂数据的PHP WebService至关重要。

    动态调用webservice与复杂对象的序列化

    1. 数据类型兼容性:确保目标语言和源语言之间的数据类型匹配,例如日期格式、数字表示等。 2. 循环引用:如果对象图中存在循环引用,序列化器可能陷入无限循环,需要特别处理。 3. 自定义序列化和反序列化逻辑:...

    Webservice笔记含使用cxf和jaxws两种方式开发webservice【源代码+笔记】

    使用webservice传输xml数据(重点掌握) 第二天: Jaxws的深入开发: 常用注解 测试jaxws传输复杂对象类型 CXF开发webservice: CXF入门程序 Spring+cxf整合(重点) CXF发布rest的webservice。(重点)...

    webservice获取List案例

    在IT行业中,Web服务是一种通过网络提供和使用应用程序接口(API)的方式,它允许不同的系统之间交换数据。...通过研究提供的代码和理解其背后的原理,你可以掌握如何在实际项目中处理复杂数据类型的Web服务调用。

    web Service 传递集合(实例)

    3. **WSDL(Web服务描述语言)**:定义Web服务接口时,WSDL文档会包含服务的输入和输出数据类型。如果数据类型是集合,WSDL需要正确地描述这些类型,以便客户端能够生成对应的代理类。 4. **Wsdl.exe或SvcUtil.exe*...

    WebService之axis的复杂对象传输方案

    对于复杂的业务场景,往往需要在客户端和服务端之间传输复杂的Java对象,这就涉及到如何在WebService中正确地序列化和反序列化这些复杂对象的问题。本文将详细介绍如何使用Apache Axis框架来实现复杂对象的传输。 #...

    Android调用webservice进行实体对象的传递Json

    对于基本数据类型的传递,ksoap2库提供了一个简单的方法。你可以直接将这些值作为参数传递给WebService,同时也可以作为返回值接收。例如,如果你有一个获取用户ID的WebService方法,可以这样在Android端调用: ```...

    .net WebService 大数据量时性能的提高

    总的来说,提高.NET WebService在大数据量下的性能涉及多个层面,包括数据结构选择、传输优化、并行处理、数据库优化等。通过综合运用这些策略,可以有效地减轻服务器负载,提升用户体验。对于具体项目,应根据实际...

    axis2_demo实战 复杂对象传输 文件传输

    在`axis2_demo`项目中,我们将看到如何创建和调用Web服务,以实现不同类型的数据传输。在描述中提到的"传List",意味着我们可以传递Java集合,如ArrayList或LinkedList等,作为Web服务的参数。这使得Web服务能够处理...

    WebService

    - `&lt;s:complexType/&gt;` 表示该元素的数据类型是一个复杂的类型,但具体定义未给出。 - `&lt;s:element name="getRegionDatasetResponse"&gt;` 定义了一个响应元素 `getRegionDatasetResponse`。 - `...

    webservice 心得

    2. **XML的运用**:WebService主要通过XML(Extensible Markup Language)来封装和传输数据。XML是一种结构化的文本格式,能够清晰地表示复杂的数据结构,并且易于解析和生成。使用XML作为数据交换格式使得...

    webservice 数据交换

    在本文中,我们将深入探讨WebService的核心概念、工作原理、数据传输与同步的相关知识点。 一、WebService概述 WebService是一种基于XML(Extensible Markup Language)标准的技术,它通过SOAP(Simple Object ...

    CXF webservice 示例工程(集成spring)

    5. **复杂数据类型Service接口示例**: 在实际应用中,往往需要处理复杂的对象模型。此示例展示了如何定义和操作包含自定义对象的服务接口。开发者可以通过定义Java类来表示复杂数据结构,并在服务接口中使用这些类...

    HTTP接口和WebService接口

    相比于HTTP接口,WebService接口更注重标准和规范,能处理复杂的数据类型,并且可以在不同操作系统和编程语言之间无缝通信。然而,由于其XML编码的复杂性和较高的开销,WebService在效率上可能不如HTTP接口。 在...

    c++调用webservice(包括静态和动态以及webservice源码)

    它通过HTTP协议传输数据,使用SOAP(Simple Object Access Protocol)作为消息格式,WSDL(Web Services Description Language)用于描述服务接口,UDDI(Universal Description, Discovery, and Integration)则...

    WebService传递对象与集合问题.rar

    本资源"WebService传递对象与集合问题.rar"显然关注的是在Web Service中如何有效地传递复杂数据类型,如对象和集合。 在传统的Web Service中,数据通常通过XML格式进行传输,这是SOAP消息的基础。然而,直接传递...

    WebService axis1.4接口服务序列/反序列复杂项目实例

    1. **自定义实体对象**:开发者可能创建了自己的Java类来表示业务逻辑中的复杂数据结构。这些类需要被序列化成XML以便在Web服务请求和响应中传输。Axis1.4提供了一种机制,通过JAXB(Java Architecture for XML ...

    webservice开发文档

    - 可以定义复杂的数据类型,提高服务的灵活性。 ##### 4. UDDI (Universal Description, Discovery and Integration) - **概念**:UDDI 是一个用于注册、发现和集成 WebService 的目录服务。 - **作用**: - 为 ...

Global site tag (gtag.js) - Google Analytics