来自 hideto
配置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
<script>render_code();</script>
其中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>
<script>render_code();</script>
让我们看看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!";
- }
-
- }
<script>render_code();</script>
这里我们假设上传一张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
<script>render_code();</script>
其中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>
<script>render_code();</script>
看看我们怎么在前台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>
<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?
|
相关推荐
博文链接:https://hideto.iteye.com/blog/65607
利用mule 服务总线代理 cxf发布的服务。其中详细的描述了cxf服务的发布的访问,以及如何使用mule的代理模式代理cxf的服务。步骤详细,有图有真相.
利用mule服务总线代理cxf服务源码。
使用MuleEsb同时掉多个webservice,并返回到调用方。开发环境为AnyPoint3.7,将例子中的webservice接口修改成自己的即可运行。
Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个应用, 使得它们可以交换数据。 Mule ESB 容易集成现有异构系统,包括:JMS, Web Services, JDBC, HTTP, 等. ESB...
mule in aciton:mule 实战,主要是社区成熟,文档丰富。开源esb
MuleESB Docker映像 此存储库包含。 您需要通过以下命令从Docker注册表中提取Mule docker映像: docker pull eddumelendez/mule 之后,您应该可以通过以下方式运行Mule docker映像: docker run -ti ...
vim-mule:用于VIM的Django生产力插件
您可以使用Mule来智能地管理节点之间的消息路由,数据映射,编排,可靠性,安全性和可伸缩性,而不是在系统,服务,API和设备之间创建点对点集成。 将其他系统和应用程序插入Mule,并使其处理系统之间的所有通信,...
关于在tomcat上进行mule多线程数量参数配置
企业服务总线ESB中用户数量大,文档丰富,社区成熟的一款开源ESB。
简介了企业服务总线mule的实现基本结构