`
hideto
  • 浏览: 2677881 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多
配置Mule和XFire环境
参考前面的文章实战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?
分享到:
评论
3 楼 toby2007 2009-03-10  
你好,我刚开始研究mule,问个不成熟的问题,mule到底怎么使用呢?集成现有的项目就是把mule的lib加到项目里,加个mule-config.xml配置文件吗?还是需要把编译的服务组件class都拷到mule的加载目录?
希望能得到你的帮助
2 楼 hideto 2007-06-07  
这应该与采用的文件上传组件有关,commons-fileupload、smartupload等等不同的组件性能不同,但文件大小限制是可以配置的,一般1G以下都不会有问题。
1 楼 ming616 2007-06-06  
如果是大文件呢,你所说明的方法最大能处理的文件大小是多少呢?

相关推荐

    实战Mule:利用Mule调用XFire发布的Web服务

    【实战Mule:利用Mule调用XFire发布的Web服务】这一主题主要涵盖了两个核心概念:Mule ESB(企业服务总线)和XFire,它们都是在IT领域中的重要工具,尤其在分布式系统和集成解决方案中发挥着关键作用。 Mule ESB是一...

    利用mule服务总线代理cxf服务

    本文将详细介绍如何利用Mule ESB(Enterprise Service Bus)作为代理来访问CXF发布的Web服务。 #### 建立CXF服务端 首先,我们需要构建一个CXF服务端来提供服务。下面是具体步骤: 1. **下载并安装CXF** 访问...

    MULE开发实例1---并行调用多个webservice接口

    5. **配置Flow References**:在Scatter-Gather内部,为每个Web服务Outbound Endpoint创建一个单独的子流程,这样每个Web服务调用将在自己的线程中执行。 6. **收集响应**:Scatter-Gather会收集所有子流程的响应,...

    利用mule服务总线代理cxf服务源码

    本文将深入探讨如何利用Mule服务总线代理Apache CXF服务源码,帮助开发者更好地理解这两种技术的结合及其在实际项目中的应用。 首先,Mule ESB是一种流行的开源ESB(企业服务总线),它允许系统间的集成和数据流...

    ESB比较 adfasdfasf

    根据提供的文件信息,我们可以提取并总结出关于企业服务总线(Enterprise Service Bus, ESB)的相关知识点。以下是对这些信息的详细解读: ### ESB概述 企业服务总线(ESB)是一种软件架构模型,用于支持和服务于...

    mule in action 即mule实战源码

    3. **预建连接器**:Mule提供了大量预建的连接器,可以轻松连接到各种外部系统,如数据库、Web服务、文件系统等。 4. **云集成**:Mule ESB支持云环境,可以与AWS、Azure、Google Cloud等主流云平台无缝集成。 5. **...

    mule开发环境搭建和部署

    三、Mule项目发布 在Mule项目中,需要新建一个项目,例如SayHello项目。然后,在该项目下新建一个包,名称为com.mule.nick.test,在该包下新建一个类,类名为SayHello。在SayHello类中,新增一个sayHello()方法,...

    mule in action mule 实战

    Mule in Action是一本关于Mule ESB(企业服务总线)的实战指南,旨在为读者提供深入的实践知识和案例分析。ESB作为一种流行的中间件技术,用于实现不同系统之间的服务集成。Mule作为一个开源的ESB解决方案,通过其...

    mule一些demo(webservice,http,文件传输,数据库连接等)

    例如,我们可能会看到定义了Web服务消费者来调用外部服务,HTTP监听器来接收HTTP请求,或是文件传输模块用于文件的上传和下载,还有可能涉及数据库连接配置,如JDBC连接器用于与数据库交互。 4. **classes**:这是...

    MULE用户指南3.3

    3. **连接器(Connectors)**:MULE 3.3提供了丰富的预建连接器,如JDBC、HTTP、FTP、SMTP等,用于连接数据库、Web服务、文件系统等。用户需要了解如何配置和使用这些连接器,以适应各种集成场景。 4. **数据映射...

    mule -esb 源码

    `openejb.conf`和`openejb.properties`涉及到OpenEJB,这是一个开源的Java Enterprise Edition (Java EE)容器,Mule ESB可能会利用它来支持企业级服务,如JavaBeans、EJBs等。这些配置文件用于定制OpenEJB的行为,...

    mule IDE (mule ESB)

    Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个应用, 使得它们可以交换数据。 Mule ESB 容易集成现有异构系统,包括:JMS, Web Services, JDBC, HTTP, 等. ESB...

    mule使用SOAP工件发布和消费web Service的简单例子

    总结来说,"mule使用SOAP工件发布和消费web Service的简单例子"是关于利用Mule ESB创建和使用SOAP服务的一个实践教程。通过"hello-ws"示例,我们可以深入理解SOAP服务的生命周期,从定义WSDL到编写服务逻辑,再到...

    mule-standalone-3.9.0.zip

    - **事件驱动**:Mule ESB基于事件驱动模型,允许它处理并发请求,并能有效地响应系统中的变化。 - **连接器**:Mule提供了大量的预建连接器,如数据库、文件、HTTP、JMS等,可以轻松连接到各种系统和协议。 - **...

Global site tag (gtag.js) - Google Analytics