|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
建立Web service的目的是将数据转变成XML格式。将一个购买订单转变为XML格式十分简朴,但是假如是像幻灯片或者即使是单一的图像之类更加复杂的数据类型又会怎样呢?让我们看一看你如何使用Apache SOAP来传输文件给你的Web service。 简朴情况 在这个例子中我们的Web service是一个将文件存储到服务器上的归档系统,在实际情况中,你可能会使用FTP实现这些简朴的事情。在这种情况下,我们建立服务类来接收一个文件并将其存储到服务器上。同时,我们还创建一个客户类来调用Web service。 The ArchiveService 我们说的ArchiveService类由一个单独的StoreFile方式组成。这个方式带了两个参数:一个是文件名,另一个是DataHandler对象,这个文件名明显是用来传输文件的名字,而DataHandler则治理文件内容的传送。清单1显示了用来创建这个类的ArchiveService.java文件。 清单1:ArchiveService.java import java.io.*; import java.util.*; import javax.activation.*; public class ArchiveService { public String StoreFile (String filename, DataHandler dh) throws IOException { FileOutputStreamfos = new FileOutputStream("C:wsfiles" + filename); Object o = dh.getContent(); dh.writeTo(fos); fos.close(); return "File received: " + filename; } } 将要传送的文件在DataHandler对象中被传送,当StoreFile方式被调用时,一个新的文件被写入服务器上的某个特定位置(在这个例子中,在C:wsfiles目录下)。有一条信息返回给客户用来确认文件已经被接收。 The ArchiveClient ArchiveClient类比服务要复杂一些,正如你在清单2种看到的相同。这个类使用了基于Call对象的标准SOAP客户设置。他们的主要区别是我们使用一个DataHandler来存储文件数据。文件内容实际上被装载到Datasource对象中用以创建一个新的DataHandler。接着我们将DataHandler作为一个参数传送给ArchiveServe的StroeFile方式。 清单2:ArchiveClient.java import java.io.*; import java.util.*; import java.net.*; import javax.activation.*; import org.apache.soap.*; import org.apache.soap.util.mime.*; import org.apache.soap.rpc.*; public class ArchiveClient { public void StoreFile(String filename) { URL url; Call call = new Call(); String urn = "urn:ArchiveService"; try { url = new URL("http://localhost/soap/servlet/rpcrouter"); call.setTargetObjectURI(urn); call.setMethodName("StoreFile"); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC ); Vector params = new Vector(); File file = new File(filename); DataSourceds = new ByteArrayDataSource(new File(filename), null); DataHandler dh = new DataHandler(ds); params.addElement(new Parameter("filename", String.class, file.getName(), null)); params.addElement(new Parameter("dh", javax.activation.DataHandler.class, dh, null)); call.setParams(params); Response response = call.invoke(url, ""); if (!response.generatedFault()) { Parameter p = response.getReturnValue(); System.out.println("Response = " + p.getValue()); } else { Fault f = response.getFault(); System.out.println("Fault: " + f.getFaultString()); } } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); } } public static void main(String[] args) { ArchiveClient ac = new ArchiveClient(); ac.StoreFile("C:wsfilessourcefoo.jpg"); } } 数据处理程序(The DataHandler) 在这个例子中,DataHandler对象真正的展现了它的力量,其原因是Java Activation Framework提供了数据的顺序化和无序化,并且自动地将它附给SOAP信息。你的文件数据不是直接用XML形式传送,而是以一个附件形式传送给SOAP封装的。整个SOAP哀求第一部分是SOAP封装,第二部分是附件。这基本上与在e-mail信息中发送附件的格式一样。当服务器接收到多个哀求时,它会自动地找到相应的附件供SOAP服务使用。 返回类别: 教程 上一教程: J2EE修炼之四书五经 下一教程: 类似MSDN CSDN导航树效果,JSP+JAVASCRIPT实现 您可以阅读与"用 APACHE 传送文件"相关的教程: · Apache泄露重写的任意文件漏洞 · 基于APACHE 配置文件的WEB页面访问权限控制 · JAVABEAN实现多个文件上传的两种方式 · JSP在线考试系统-BEAN文件 · 原来Eclipse3.0.1中的jboss32x.server文件不匹配JBoss3.2.6!郁闷~ |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |