实战Mule:利用Mule调用XFire发布的文件上传服务

来自 hideto

配置Mule和XFire环境
参考前面的文章实战Mule:利用Mule调用XFire发布的Web服务

利用XFire发布一个文件上传Web服务UploadService
在Eclipse里新建项目webservice,目录结构如下:

代码
  1. webservice   
  2.   src-service   
  3.     cn.hidetoishandsome.xfire.service   
  4.       IUploadService.java   
  5.     cn.hidetoishandsome.xfire.service.impl   
  6.       UploadService.java   
  7.   src-conf   
  8.     META-INF   
  9.     xfire   
  10.       services.xml   
  11.   web   
  12.     WEB-INF   
  13.       lib   
  14.       web.xml   
<script>render_code();</script>
其中services.xml如下:
代码
  1. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  2.     <service>  
  3.         <name>UploadService</name>  
  4.         <namespace>http://localhost:9090/webservice/services/UploadService</namespace>  
  5.         <serviceClass>cn.hidetoishandsome.xfire.service.IUploadService</serviceClass>  
  6.         <implementationClass>cn.hidetoishandsome.xfire.service.impl.UploadService</implementationClass>  
  7.     </service>  
  8. </beans>  
<script>render_code();</script>
让我们看看UploadService.java:
代码
  1. package cn.hidetoishandsome.xfire.service.impl;   
  2.   
  3. import java.io.File;   
  4. import java.io.FileOutputStream;   
  5.   
  6. import org.codehaus.xfire.util.Base64;   
  7.   
  8. import cn.hidetoishandsome.xfire.service.IUploadService;   
  9.   
  10. public class UploadService implements IUploadService {   
  11.   
  12.     public String upload(String encodedFileString) {   
  13.         FileOutputStream fos = null;   
  14.         File file = new File("D:\\test.jpg");   
  15.         byte[] bytes = Base64.decode(encodedFileString);   
  16.         try {   
  17.             fos = new FileOutputStream(file);   
  18.             fos.write(bytes);   
  19.             fos.flush();   
  20.             fos.close();   
  21.         } catch (Exception e) {   
  22.             return "Wrong!";   
  23.         }   
  24.         return "Success!";   
  25.     }   
  26.   
  27. }   
<script>render_code();</script>
这里我们假设上传一张jpg图片,并将Base64binary encode为String,然后在UploadService里decode为byte[]并写入Disk。

 

利用Mule构建我们的ESB中心
在Eclipse里创建新项目esb,目录结构如下:

代码
  1. esb   
  2.   web   
  3.     WEB-INF   
  4.       lib   
  5.       mule-services-config.xml   
  6.       web.xml   
  7.     index.jsp   
<script>render_code();</script>
其中mule-services-config.xml配置了我们的UploadService:
代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN"   
  3.                                 "http://mule.mulesource.org/dtds/mule-configuration.dtd">  
  4. <mule-configuration id="Mule_Demo" version="1.0">  
  5.     <mule-descriptor name="UploadService" inboundEndpoint="vm://uploadservice" implementation="org.mule.components.simple.BridgeComponent">  
  6.         <outbound-router>  
  7.             <router className="org.mule.routing.outbound.OutboundPassThroughRouter">  
  8.                 <endpoint address="wsdl-xfire:http://localhost:9090/webservice/services/UploadService?wsdl&method=upload"/>  
  9.             </router>  
  10.         </outbound-router>  
  11.     </mule-descriptor>  
  12. </mule-configuration>  
<script>render_code();</script>
看看我们怎么在前台index.jsp页面上传文件数据:
代码
  1. <%@ 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"%>     
  2. <%@ page language="java" contentType="text/html; charset=UTF-8" %>     
  3. <html>     
  4. <head>     
  5. <title>Mule Upload Example</title>     
  6. </head>     
  7. <body>     
  8. <%   
  9.     try {   
  10.         FileItemFactory factory = new DiskFileItemFactory();   
  11.         ServletFileUpload upload = new ServletFileUpload(factory);   
  12.         List fileItems = upload.parseRequest(request);   
  13.         FileItem item = (FileItem) fileItems.get(0);   
  14.         MuleClient client = new MuleClient();   
  15.         byte[] bytes = item.get();   
  16.         String encodedFileString = Base64.encode(bytes);   
  17.         UMOMessage message = client.send("vm://uploadservice", encodedFileString, null);   
  18.         out.print(message.getPayload());   
  19.     } catch(Exception e) {   
  20.     }   
  21. %>  
  22.   
  23. <form method="POST" name="uploadFile" action="" enctype="multipart/form-data">     
  24.     <table>     
  25.         <tr><td>     
  26.             <input type="file" name="file"/></td><td><input type="submit" name="Go" value=" Go " />     
  27.         </td></tr>     
  28.     </table>     
  29. </form>     
  30. <p/>     
  31. </body>     
  32. </html>  
<script>render_code();</script>
注意这里我们用到了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-xfire-upload.rar
 描述:  
下载
 文件名:  mule-xfire-upload.rar
 文件大小:  5 KB
 下载过的:  文件被下载或查看 62 次
最后更新:2007-03-27 15:19
15:17  |   永久链接  |   浏览 (1024)  |   评论 (2)  |    收藏  |   Java  |  
 
评论    共 2 条 发表评论
ming616     2007-06-06 13:08

如果是大文件呢,你所说明的方法最大能处理的文件大小是多少呢?

hideto     2007-06-07 15:06

这应该与采用的文件上传组件有关,commons-fileupload、smartupload等等不同的组件性能不同,但文件大小限制是可以配置的,一般1G以下都不会有问题。

你可能感兴趣的:(apache,eclipse,Web,xml,webservice)