2007-03-27
实战Mule:利用Mule调用XFire发布的文件上传服务
关键字: Mule XFire SOA WebService fileupload 文件上传
配置Mule和XFire环境
参考前面的文章实战Mule:利用Mule调用XFire发布的Web服务。
利用XFire发布一个文件上传Web服务UploadService
在Eclipse里新建项目webservice,目录结构如下:
其中services.xml如下:
让我们看看UploadService.java:
这里我们假设上传一张jpg图片,并将Base64binary encode为String,然后在UploadService里decode为byte[]并写入Disk。
利用Mule构建我们的ESB中心
在Eclipse里创建新项目esb,目录结构如下:
其中mule-services-config.xml配置了我们的UploadService:
看看我们怎么在前台index.jsp页面上传文件数据:
注意这里我们用到了commons-fileupload组件库,其他库采用上一篇实战Mule:利用Mule调用XFire发布的Web服务的库。
我们用org.codehaus.xfire.util.Base64工具类把上传文件的byte数组encode为String,并作为参数传递给Web服务。
测试及源代码
按照上篇文章实战Mule:利用Mule调用XFire发布的Web服务的讲述来启动两个Tomcat测试,打开
浏览器访问http://localhost:8080/esb并Browse一张jpg图片,然后点击提交,看看我们的"D:\"下是不是多了一张test.jpg?
参考前面的文章实战Mule:利用Mule调用XFire发布的Web服务。
利用XFire发布一个文件上传Web服务UploadService
在Eclipse里新建项目webservice,目录结构如下:
webservice
src-service
cn.hidetoishandsome.xfire.service
IUploadService.java
cn.hidetoishandsome.xfire.service.impl
UploadService.java
src-conf
META-INF
xfire
services.xml
web
WEB-INF
lib
web.xml
其中services.xml如下:
<beans xmlns="http://xfire.codehaus.org/config/1.0"> <service> <name>UploadService</name> <namespace>http://localhost:9090/webservice/services/UploadService</namespace> <serviceClass>cn.hidetoishandsome.xfire.service.IUploadService</serviceClass> <implementationClass>cn.hidetoishandsome.xfire.service.impl.UploadService</implementationClass> </service> </beans>
让我们看看UploadService.java:
package cn.hidetoishandsome.xfire.service.impl;
import java.io.File;
import java.io.FileOutputStream;
import org.codehaus.xfire.util.Base64;
import cn.hidetoishandsome.xfire.service.IUploadService;
public class UploadService implements IUploadService {
public String upload(String encodedFileString) {
FileOutputStream fos = null;
File file = new File("D:\\test.jpg");
byte[] bytes = Base64.decode(encodedFileString);
try {
fos = new FileOutputStream(file);
fos.write(bytes);
fos.flush();
fos.close();
} catch (Exception e) {
return "Wrong!";
}
return "Success!";
}
}
这里我们假设上传一张jpg图片,并将Base64binary encode为String,然后在UploadService里decode为byte[]并写入Disk。
利用Mule构建我们的ESB中心
在Eclipse里创建新项目esb,目录结构如下:
esb
web
WEB-INF
lib
mule-services-config.xml
web.xml
index.jsp
其中mule-services-config.xml配置了我们的UploadService:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN"
"http://mule.mulesource.org/dtds/mule-configuration.dtd">
<mule-configuration id="Mule_Demo" version="1.0">
<mule-descriptor name="UploadService" inboundEndpoint="vm://uploadservice" implementation="org.mule.components.simple.BridgeComponent">
<outbound-router>
<router className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="wsdl-xfire:http://localhost:9090/webservice/services/UploadService?wsdl&method=upload"/>
</router>
</outbound-router>
</mule-descriptor>
</mule-configuration>
看看我们怎么在前台index.jsp页面上传文件数据:
<%@ page import="org.mule.extras.client.MuleClient, org.mule.umo.UMOMessage, org.apache.commons.fileupload.disk.DiskFileItemFactory, org.apache.commons.fileupload.servlet.ServletFileUpload, org.apache.commons.fileupload.*, java.util.List, org.codehaus.xfire.util.Base64"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>Mule Upload Example</title>
</head>
<body>
<%
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List fileItems = upload.parseRequest(request);
FileItem item = (FileItem) fileItems.get(0);
MuleClient client = new MuleClient();
byte[] bytes = item.get();
String encodedFileString = Base64.encode(bytes);
UMOMessage message = client.send("vm://uploadservice", encodedFileString, null);
out.print(message.getPayload());
} catch(Exception e) {
}
%>
<form method="POST" name="uploadFile" action="" enctype="multipart/form-data">
<table>
<tr><td>
<input type="file" name="file"/></td><td><input type="submit" name="Go" value=" Go " />
</td></tr>
</table>
</form>
<p/>
</body>
</html>
注意这里我们用到了commons-fileupload组件库,其他库采用上一篇实战Mule:利用Mule调用XFire发布的Web服务的库。
我们用org.codehaus.xfire.util.Base64工具类把上传文件的byte数组encode为String,并作为参数传递给Web服务。
测试及源代码
按照上篇文章实战Mule:利用Mule调用XFire发布的Web服务的讲述来启动两个Tomcat测试,打开
浏览器访问http://localhost:8080/esb并Browse一张jpg图片,然后点击提交,看看我们的"D:\"下是不是多了一张test.jpg?
评论
hideto
2007-06-07
这应该与采用的文件上传组件有关,commons-fileupload、smartupload等等不同的组件性能不同,但文件大小限制是可以配置的,一般1G以下都不会有问题。
ming616
2007-06-06
如果是大文件呢,你所说明的方法最大能处理的文件大小是多少呢?
发表评论
- 浏览: 681838 次
- 性别:

- 来自: BJ

- 详细资料
搜索本博客
我的相册
screenshot
共 1 张
共 1 张
最近加入圈子
最新评论
-
Mnesia用户手册:三,构建 ...
要想创建disc_copies和disc_only_copies类型的表有两个前 ...
-- by hideto -
翻译www.djangobook.com之 ...
有个问题问一下: 我先配置了一个urlpatterns是这样的: r'^myd ...
-- by lyhapple -
Why OO sucks
gigix 写道lyl0035 写道为啥就没人想想,其实在面向对象的代码中也流露 ...
-- by hurd -
Why OO sucks
貌似又回到当年java vs c的年代。两种方式,不管是OO还是FP,仅是人处理 ...
-- by python -
大家可以抛弃Java踹死Djan ...
to phoenixup:1,你还别说,你举的什么Struts,Tapestry ...
-- by hideto






评论排行榜