·您的位置: 首页 » 资源教程 » 编程开发 » JAVA、JSP » 用 APACHE 传送文件

用 APACHE 传送文件

类别: JSP教程  评论数:0 总得分:0
建立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服务使用。
-= 资 源 教 程 =-
文 章 搜 索
关键词:
类型:
范围:
纯粹空间 softpure.com
Copyright © 2006-2008 暖阳制作 版权所有
QQ: 15242663 (拒绝闲聊)  Email: faisun@sina.com
 纯粹空间 - 韩国酷站|酷站欣赏|教程大全|资源下载|免费博客|美女壁纸|设计素材|技术论坛   Valid XHTML 1.0 Transitional
百度搜索 谷歌搜索 Alexa搜索 | 粤ICP备19116064号-1