图片、影音等相似的这些二进制数据如何做为参数传入,或者做为返回值从web服务操做中返回?只有进行类型转换了。基于SOAP的web服务用到的数据类型并不仅局限于纯文本,可是这些web服务对于二进制数据的使用引起了重大的效率问题 。java
在基于SOAP的web服务中,能够利用以下两种通用的作法来处理任意的二进制数据:web
二进制数据能够经过某种模式编码,好比使用Base64编码规范,而后做为SOAP消息体中的单元进行传送。好比,一个能够向请求者返回图片格式的服务操做能够简单地返回一个java.awt.Image对象,它是java中对二进制图像数据进行包装的类。那么图像所包括的byte数据能够进行编码后做为SOAP消息体进行传输。不利的一面就是Base64编码或相似的编码格式将会致使发送单元相比编码前的二进制数据而言,在内容多少上至少膨胀三分之一。简而言之,像Base64这样的byte编码将致使数据量进一步膨胀。ide
二进制数据能够做为SOAP消息的一个或多个附件的方式发送。回顾前面,SOAP消息由一个SOAP part组成,在其中包括一个可选的消息报头和可能为空的消息报体以及可选的SOAP附件。附件的数据内容能够是任何定义的MIME类型,包括:audio/x-wav、video/mpeg及image/jpeg等这些多媒体类型。JAX-B提供了MIME类型和Java类型间必需的映射:其中MIME类型image/*map对应java Image类型,剩下其余多媒体类型对应DataHandler。编码
在web服务中往返于发送者和接收者之间传输的二进制数据,一般采用附件的方式传输而不是对这些数据编码后传输,由于这种选择避免了数据量的膨胀。不利的一面是数据的接收者必须处理这些未通过处理的byte数据,好比将这些byte数据再转换为图像或声音类型。spa
使用SOAP附件传输二进制数据的3种选择对象
SOAP附件方式存在3种基本的选择:SwA(SOAP with Attachments),SOAP规范中所指定的附件方式;DIME(Direct Internet Message Encapsulation),轻量级的可是有些过期的编码格式;MTOM(Message Transmission Optimization Mechanism),基于XOP(XML-Binary OPtimized Packaging)。JWS提供了DIME方式的扩展,主要目的就是针对微软客户端的互用性提供支持。一直到Microsoft Office 2003发布为止,由微软宏语言(VBA)编写的web服务客户端只可以处理DIME编码的附件。SwA方式也有严重缺点,SwA很难处理Document绑定样式的服务,而这种绑定样式目前已经成为一种标准。何况,像微软的.Net平台也不支持SwA方式。MTOM经过了W3C认证,享有普遍的支持;所以,在基于SOAP的web服务二进制数据传输中,MTOM表明了目前高效、流行的数据交互方式。
图片