`
newleague
  • 浏览: 1499749 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

传智播客-web service(7)-序列化与反序列化、文件上传与下载

 
阅读更多
序列化与反序列化 WS中的序列化与反序列化是指java对象与xml之间的相互转换,意即如果传输的数据是java对象,例如基本数据类型的包装类,自定义的义务类、集合等,客户端服务端需要显示注册序列化器和反序列化器。而利用axis开发的WS应用,是以“映射”的方式来体现这一点的,所以像axis这样的引擎也被称为OXM--Object XML Mapping。 服务端,如果程序运行时报错“faultString: java.io.IOException: No serializer found for class cn.itcast.myaxis.service.pojo.Customer in registry org.apache.axis.encoding.TypeMappingDelegate@b9b618”,则很可能是服务端没有声明java对象与xml的映射,例如<beanmapping qname="ns:Customer" xmlns:ns="urn:customer:pojo:service:itcast:cn" languagespecifictype="java:cn.itcast.myaxis.service.pojo.Customer"></beanmapping>,有几个对象就需要有几个映射声明,作为<service>的子元素。 beanMapping是axis引擎自带的序列化器,typeMapping则允许用户自定义序列化器,但是beanMapping可以认为是typeMapping的快捷方式,因为typeMapping默认的就是beanMapping,数组用arrayMapping,不过一般情况下数组的序列化不用显示声明也可以。 有的集合类,比如hashtable确实有序列化器,但和其他的soap实现没有正规的交互;SOAP规范也没有设计复杂对象。可靠的方式就是使用数组发送集合对象(但.Net不能处理他们)。不过有些java的SOAP实现支持hashtable的组装和拆解. 客户端,如果程序运行时报错“org.xml.sax.SAXException: Deserializing parameter ''getCustomerReturn'': could not find deserializer for type {urn:customer:pojo:service:itcast:cn}Customer”,则需要显示声明注册映射信息,示例代码如下: + expand sourceview plain 如果代码call.invoke(new Object[]{5})没有被赋予对象Object o,在该句添加断点,调试运行时用watch查看该元素,会发现报错“com.sun.jdi.InvalidTypeException: Generated value (int) is not compatible with declared type (java.lang.Object). occurred while setting value in array.”这是因为如果没有强制转换赋值的话,可能不能调用通过注册的序列化器和反序列化器,所以会报错。 如果是集合类的,采用上述方法即可。不过有的时候还要看jdk版本。我用的jdk6u18,无论是否有泛型,返回list采用上述代码都可以;但是map没有泛型的话,还是会报错“No deserializer for {http://schemas.xmlsoap.org/soap/encoding/}string”,需要添加代码显示声明EncodingStyle(jdk6u16就不需要这么做): call.setEncodingStyle ("http://schemas.xmlsoap.org/soap/encoding/");或者--&gt; call.setEncodingStyleType ("http://schemas.xmlsoap.org/soap/encoding/")--看axis的版本了。 RMIException(映射到SOAP Fault)不注册也可以被序列化,但是信息不全,所以最好还是序列化,可以用TCP/IP Monitor查看响应信息来验证。 文件上传与下载 直接编码用byte[]的方式上传下载文件也可以,但是性能差,尤其传输大文件的时候--用TCP/IP Monitor可以看到传输的文件是一次性传输,打个比方来说就像是用一辆大卡车在一条马路上运送一批货物,可以想到,如果此时该马路上还有其他卡车需要运送货物的话,很容易造成交通堵塞。所以,WS的实际应用中文件的上传下载是采用MIME方式,包装成DataHandle传输,相当于一批货物分散到多个小卡车依序在一条马路上运输,而这需要activation.jar和mail.jar包的支持。 axis中文件的上传下载是放到MessageContext环境中的。下面是用MIME方式上传文件的示例代码:</service>
分享到:
评论

相关推荐

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop ...

    json-lib 序列化和反序列化

    在`json_lib_demo2`这个示例文件中,可能包含了如何使用`json-lib`进行序列化和反序列化的代码演示。通常,这样的示例会包含创建Java对象、转换成JSON字符串、再将JSON字符串转换回Java对象的过程,以便开发者理解并...

    第38天:WEB漏洞-反序列化之PHP&JAVA全解(下)1

    标题中的“WEB漏洞-反序列化之PHP&JAVA全解(下)”指的是关于Web应用程序安全领域的一个重要话题,即PHP和JAVA平台上的反序列化漏洞。反序列化漏洞是由于程序在处理序列化数据时没有充分验证输入,从而允许攻击者构造...

    C++ JSON 序列化与反序列化

    C++的JSON序列化和反序列化是开发Web服务、网络通信或存储配置文件时必不可少的技术。选择合适的库并理解其工作原理,能帮助我们更高效地处理JSON数据。通过实践和学习,可以掌握更多高级技巧,如自定义序列化策略、...

    [Timeline Sec] - CVE-2020-9484:Tomcat Session 反序列化复现1

    CVE-2020-9484的根源在于错误配置和`org.apache.catalina.session.FileStore`组件中的本地文件包含(LFI)以及反序列化问题。当Tomcat配置使用`org.apache.catalina.session.PersistentManager`作为会话管理器,并且...

    ShiroExp-1.3.1-all.jar shiro反序列化检测工具

    ShiroExp-1.3.1-all.jar shiro反序列化检测工具 我这里是用于搭建攻防演练演示环境用

    protobuf常用序列化和反序列化API

    **protobuf常用序列化和反序列化API** protobuf(Protocol Buffers)是Google开发的一种数据序列化协议,广泛应用于网络通信、数据存储等领域。它提供了一种高效、灵活且跨平台的方式来编码和解码结构化数据。...

    XML序列化与反序列化 实战

    XML序列化与反序列化是.NET框架中处理数据交换的重要技术,它允许我们将对象的状态转换为XML格式的数据,也可以将XML数据恢复为等效的对象。这个实战项目专注于使用C#实现这一过程,使得开发者能够方便地在XML文件和...

    C#-JSON序列化和反序列化辅助类

    C#-JSON序列化和反序列化辅助类

    传智博客--张孝祥--java培训课件以及源代码

    4. **输入/输出(I/O)**:流的概念、文件操作、对象序列化、缓冲区和文件复制。 5. **网络编程**:套接字编程,客户端和服务器端的交互。 6. **多线程**:线程的创建与同步,包括synchronized、wait()、notify()和...

    64-64.渗透测试-PHP序列化与反序列化.mp4

    64-64.渗透测试-PHP序列化与反序列化.mp4

    序列化和反序列化dll文件和proto

    在IT领域,序列化和反序列化是两个关键的概念,特别是在数据存储、网络通信和分布式系统中。它们涉及将对象的状态转换为可持久化的格式(序列化),以及将这种格式还原回原来的对象(反序列化)。本文将深入探讨这两...

    java 对象的序列化与反序列化

    Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...

    传智播客java开发入门预热班教案

    7. **输入输出流**:学习文件操作,包括文件的读写、对象序列化与反序列化,以及标准输入输出流的使用。 8. **集合框架**:熟悉ArrayList、LinkedList、HashSet、HashMap等集合类的使用,理解它们的底层实现和操作...

    基于boost的序列化与反序列化

    在编程领域,序列化和反序列化是两个关键的概念,它们用于将对象的状态转换为可存储或可传输的格式,然后在需要时恢复为原始对象。Boost库提供了一个强大的工具——Boost.Serialization,来帮助程序员实现这个功能。...

    序列化反序列化例题net

    在.NET框架中,序列化和反序列化是两个重要的概念,它们主要用于数据持久化、网络传输和跨进程通信。理解并熟练运用这些技术对于任何.NET开发者来说都是至关重要的。 序列化是将对象的状态(包括其属性和字段)转换...

    XML文件序列化与反序列化

    在IT行业中,XML文件的序列化与反序列化是两个重要的概念,它们对于数据的存储、传输和处理起着关键作用。 **1. XML文件序列化** XML文件序列化是指将程序中的对象转换为XML格式的字符串或文件的过程。这个过程通常...

    C#和Java的序列化反序列化

    本篇文章将深入探讨C#和Java中的序列化与反序列化机制。 首先,我们要了解什么是序列化。序列化是指将对象的状态转化为可存储或可传输的数据格式的过程。这个过程通常将内存中的对象转换成字节流,以便保存到磁盘、...

    序列化与反序列化

    这个文件可能包含多个Java源文件,每个文件都展示了一种特定的序列化或反序列化方法,以及相关的说明文档。 总的来说,理解和掌握序列化与反序列化对于任何IT专业人员都是必要的,因为它涉及到数据的保存、传输和...

    java基础(传智播客)

    6. **输入/输出流**:理解I/O流的概念,包括文件操作、字节流和字符流,以及缓冲区和对象序列化的应用。 7. **多线程**:学习线程的创建和同步机制,包括Thread类、Runnable接口、synchronized关键字、wait()、...

Global site tag (gtag.js) - Google Analytics