- 浏览: 16411 次
- 性别:
- 来自: 深圳
最新评论
在《
WebService大讲堂之Axis2(2):复合类型数据的传递
》中讲过,如果要传递二进制文件(如图像、音频文件等),可以使用
byte[]作为数据类型进行传递,然后客户端使用
RPC方式进行调用。这样做只是其中的一种方法,除此之外,在客户端还可以使用
wsdl2java命令生成相应的
stub类来调用
WebService,
wsdl2java命令的用法详见《
WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
》。
WebService类中包含
byte[]类型参数的方法在
wsdl2java生成的
stub类中对应的数据类型不再是
byte[]类型,而是
javax.activation.DataHandler。
DataHandler类是专门用来映射
WebService二进制类型的。
在
WebService类中除了可以使用
byte[]作为传输二进制的数据类型外,也可以使用
javax.activation.DataHandler作为数据类型。
不管是使用
byte[],还是使用
javax.activation.DataHandler作为
WebService方法的数据类型,使用
wsdl2java命令生成的
stub类中相应方法的类型都是
javax.activation.DataHandler。而象使用
.net、
delphi生成的
stub类的相应方法类型都是
byte[]。这是由于
javax.activation.DataHandler类是
Java特有的,对于其他语言和技术来说,并不认识
javax.activation.DataHandler类,因此,也只有使用最原始的
byte[]了。
下面是一个上传二进制文件的例子,
WebService类的代码如下:
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import javax.activation.DataHandler;
public class FileService
{
// 使用byte[]类型参数上传二进制文件
public boolean uploadWithByte( byte [] file, String filename)
{
FileOutputStream fos = null ;
try
{
fos = new FileOutputStream(filename);
fos.write(file);
fos.close();
}
catch (Exception e)
{
return false ;
}
finally
{
if (fos != null )
{
try
{
fos.close();
}
catch (Exception e)
{
}
}
}
return true ;
}
private void writeInputStreamToFile(InputStream is, OutputStream os) throws Exception
{
int n = 0 ;
byte [] buffer = new byte [ 8192 ];
while ((n = is.read(buffer)) > 0 )
{
os.write(buffer, 0 , n);
}
}
// 使用DataHandler类型参数上传文件
public boolean uploadWithDataHandler(DataHandler file, String filename)
{
FileOutputStream fos = null ;
try
{
fos = new FileOutputStream(filename);
// 可通过DataHandler类的getInputStream方法读取上传数据
writeInputStreamToFile(file.getInputStream(), fos);
fos.close();
}
catch (Exception e)
{
return false ;
}
finally
{
if (fos != null )
{
try
{
fos.close();
}
catch (Exception e)
{
}
}
}
return true ;
}
}
上面代码在
services.xml文件的配置代码如下:
< description >
文件服务
</ description >
< parameter name ="ServiceClass" >
service.FileService
</ parameter >
< messageReceivers >
< messageReceiver mep ="http://www.w3.org/2004/08/wsdl/in-out"
class ="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</ messageReceivers >
</ service >
如果使用
wsdl2java
命令生成调用
Java
客户端代码,则需要创建
DataHandler
类的对象实例,代码如下:
wsdl2java命令会为每一个方法生成一个封装方法参数的类,类名为方法名(第一个字符大写),如 uploadWithByte方法生成的类名为 UploadWithByte。如果要设置 file参数的值,可以使用 UploadWithByte类的 setFile方法,代码如下:
uwb.setFile(dh);
最后是调用 uploadWithByte方法,代码如下( FileServiceStub为 wsdl2java生成的 stub类名):
fss.uploadWithByte(uwb);
本文出处:
发表评论
-
SQL 函数库
2012-10-24 10:52 755<!-- done--&g ... -
jstree1.0 自定义右键菜单(转)
2011-01-20 17:32 1988$( function () { $( ... -
Struts2文件的上传和下载
2010-12-08 21:40 1184文章出处:(www.firnow.com):http://de ... -
WebService大讲堂之Axis2系列教程之十:使用soapmonitor模块监视soap请求与响应消息
2010-05-25 15:24 1073在 Axis2中提供了一个 A ... -
WebService大讲堂之Axis2系列教程之九:编写Axis2模块(Module)
2010-05-25 15:15 1029Axis2可以通过模块( Module)进行扩展。 Axi ... -
WebService大讲堂之Axis2系列教程之八:异步调用WebService
2010-05-25 15:00 1061在前面几篇文章中都是使用同步方式来调用 WebService ... -
WebService大讲堂之Axis2系列教程之七:将Spring的装配JavaBean发布成WebService
2010-05-24 17:44 906在现今的 Web应用中经 ... -
WebService大讲堂之Axis2系列教程之六:跨服务会话(Session)管理
2010-05-24 17:36 1041在 《WebService大讲堂之Axis2(5):会话(S ... -
WebService大讲堂之Axis2系列教程:会话(Session)管理
2010-05-21 10:52 1159WebService给人最直观的感觉就是由一个个方法组成,并在 ... -
WebService大讲堂之Axis2系列教程之三:使用services.xml文件发布WebService
2010-05-21 09:25 1355用 Axis2实现 Web Service,虽然可以将 ... -
WebService大讲堂之Axis2系列教程之二:复合类型数据的传递
2010-05-20 18:12 1319在实际的应用中,不仅需要使用 WebService ... -
WebService大讲堂之Axis2系列教程之一:用POJO实现0配置的WebService
2010-05-20 15:53 1533前 言: Axis2是 ...
相关推荐
WebService 大讲堂之 Axis2(4):二进制文件传输 在本文中,我们将讨论如何使用 Axis2 实现二进制文件传输。Axis2 是一个基于 Java 的WebService框架,它提供了许多强大的功能来实现WebService的开发和部署。在...
【WebService大讲堂之Axis2】是针对 Axis2 这个强大的 WebService 框架进行的入门介绍。Axis2 是 Apache 软件基金会开发的 WebService 引擎,它是在 Axis1.x 基础上的重设计,提供对 SOAP1.1 和 SOAP1.2 的支持,...
### WebService大讲堂之Axis2:深入了解零配置的WebService开发 #### 一、Axis2简介及下载安装 Axis2是Apache软件基金会提供的一款高性能、轻量级的WebService引擎,它是在Axis1.x的基础上重新设计的产物,不仅...
9. **WebService大讲堂之Axis2(4):二进制文件传输** 在这一部分,你将了解如何在Web服务中有效地传输二进制数据,如图片或视频文件,这对于多媒体应用和大数据交换特别重要。 10. **WebService大讲堂之Axis2(7):...
### WebService大讲堂之Axis2系列教程概览 #### WebService与Axis2的重要性 WebService是一种标准的技术,允许不同应用程序间进行通信,特别是在分布式环境中,它促进了不同技术栈的应用之间的集成与交互。Axis2...
在二进制文件传输方面,Axis2提供了一个模块化的架构,使得开发者可以轻松地实现二进制数据的传输和接收。而会话管理方面,Axis2支持传统的会话管理,以及在多个服务之间共享和管理会话状态。 另外,Axis2还可以将...
7. **二进制文件传输**:“WebService大讲堂之Axis2(4):二进制文件传输 .doc”讲解了如何通过Web服务发送和接收二进制数据,例如图像、PDF或其他非文本文件。 8. **SoapMonitor模块**:“WebService大讲堂之Axis2...
Java WebService大讲堂是一个全面深入讲解Web服务技术的系列教程,涵盖了从基础概念到实际应用的各个环节。这个完整版包括了1-10集的内容,旨在帮助开发者全面理解和掌握Java WebService的开发与实现。 首先,让...
在下载并解压的"Axis2大讲堂"压缩包中,你将找到一系列的资源,包括但不限于: - **01.html**:这应该是入门教程的起点,详细解释了Axis2的基础概念、安装步骤以及如何创建和部署第一个Web Service。 - **示例代码*...
- **Java Swing项目**:展示了如何使用Axis2在桌面应用程序中实现WebService调用,重点在于处理图像文件传输和ResultSet对象的传输等技术难点。 - **Struts2 Web项目**:探讨了WebService在Web开发中的应用,特别是...
3. `WebService大讲堂之Axis2.pdf`:这可能是一本关于使用Axis2进行Web服务开发的教程书籍,详细介绍了如何使用Axis2创建、部署和管理Web服务,对于学习和理解Axis2的用法非常有帮助。 Apache Axis2的核心特性包括...
文档1 pojo实现0配置 ...文档4 二进制文件读取 文档5 会话管理 文档6 跨越session管理 文档7 spring的bean发布为webservice 文档8 异步调用webservice 文档9 编写axis模块 文档10 使用moniter监视器
【压缩包子文件的文件名称】"WebService大讲堂之Axis2.pdf" 是一个关于Web服务的教程文档,很可能涵盖了Axis2框架的使用方法和最佳实践。Axis2是Apache软件基金会的一个项目,它是一个高效的Web服务引擎,用于构建和...