用Apache SOAP轻松发送文件

ZDNet软件频道 时间:2003-04-15 作者:BUILDER.COM |  我要评论()
本文关键词:
作为一个准则,Web服务常常按照XML格式来传递数据。它的格式很简单,但是复杂类型的数据,例如幻灯片或者一幅图片,该如何处理?现在,让我们看看如何用Apache SOAP向你的Web服务传输文件。
本文译自Builder.com作为一个准则,Web服务常常按照XML格式来传递数据。它的格式很简单,但是复杂类型的数据,例如幻灯片或者一幅图片,该如何处理?现在,让我们看看如何用Apache SOAP向你的Web服务传输文件。

简单的应用:文件归档服务

在这种情况下,我的Web服务是一个归档系统,它用来在服务器上保存文件。如果作为一个简单的例子,它的作用是足够的了,但是在实际应用中,你也许需要实现某些功能如FTP。在我的例子里,我创建了一个服务类用来接收一个输入文件并把它保存到服务器上。我还创建了一个客户类可以用它来调用Web服务。

归档服务在一个名为ArchiveService的类中实现。该类只有一个称之为StoreFile的方法,该方法带有两个参数:filename和DataHandle对象。参数filename显然是被传输文件的名字,而DataHandler负责文件内容的传输。清单A给出了创建该类的ArchiveService.java文件。

当StoreFile方法被调用时,保存在DataHandler对象中的输入文件写到服务器上一个特定位置上(本例为C:wsfiles目录)。然后,向客户端发送一个消息说明服务器已经接收到该文件了。

ArchiveClient类

ArchiveClient类比文件归档服务要复杂一些,你可以从清单B中找到它的实现代码。这个类用到了常态的SOAP客户设置(setup)(基于Call对象)。主要的区别在于,我用一个DataHandler来保存文件数据。该文件的内容实际上载入到一个DataSource对象中,该DataSource对象用来建立新的DataHandler。然后,我把DataHandler作为一个参数传递到ArchiveService的StoreFile方法。

DataHandler

由于Java Activation Framework提供了对数据的串行化(serialization)和解串行化(deserialization)的功能并自动将它附加到SOAP消息中去,所以在本例中,DataHandler实现主要的功能。你的文件数据并没有直接用SOAP包装后用XML传递,而是作为对附件的一个引用。整个SOAP请求按照MIME编码方式分成多个部分来发送。第一部分为SOAP封套(envelope),第二部分为附件。基本上它们的格式是相同的,这就使得你可以在电子邮件消息中发送附件。当服务器接收到上述多部分请求时,它会自动找到引用的附件并使其可以用到SOAP服务上。

从我给出的例子中,你可以看出Apache SOAP使得发送文件到Web服务器和从Web服务器中接收文件是多么的容易。尽管我给出的例子可能没有很高的参考价值,但我仍相信你可以在其它更有趣的应用程序中轻松使用这个技术。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134