mule的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:http="http://www.mulesoft.org/schema/mule/http" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd"> <spring:bean id="doSpringWork" class="com.easyway.mule.spring.httpinvoker.remoting.DoSomeWork" /> <!-- Transform a byte[] from an Http request into a Spring RemoteInvocation instance. --> <custom-transformer name="springInputXform" class="org.mule.module.spring.remoting.ObjectToRemoteInvocationTransformer" /> <!-- Convert an Object to a Spring RemoteInvocationResult and then into a byte[] for return to the caller via Http. --> <custom-transformer name="springOutputXform" class="org.mule.module.spring.remoting.ObjectToRemoteInvocationResultTransformer" /> <model name="main"> <!-- SpringHttpInvokerComponent will receive a RemoteInvocation and execute the requested method on a POJO specified by "serviceClass". --> <service name="doSomeWorkViaSpring"> <!-- Listen on 8003 for Http requests. Use springInputXform to convert a byte[] from Http into a RemoteInvocation. Use springOutputXform to convert a Object from the Mule pipeline into a RemoteInvocationResult and then into a byte[]. --> <inbound> <inbound-endpoint address="http://localhost:8003/springService" exchange-pattern="request-response"> <transformer ref="springInputXform" /> <response> <transformer ref="springOutputXform" /> </response> </inbound-endpoint> </inbound> <pooled-component> <prototype-object class="org.mule.module.spring.remoting.SpringRemoteInvokerComponent"> <properties> <!-- Instead of setting the class, provide SpringHttpInvokerComponent with a Spring managed bean instead. (This doesn't work yet because I don't know how to teach SpringHttpInvokerComponent to find Spring beans.) --> <spring:entry key="serviceBean" value-ref="doSpringWork" /> <!-- Set the serviceInterface property of Spring's RemoteInvocationBasedExporter --> <spring:entry key="serviceInterface" value="com.easyway.mule.spring.httpinvoker.remoting.WorkInterface" /> <!-- Set other properties of Spring's RemoteInvocationBasedExporter i.e. registerTraceInterceptor and remoteInvocationExecutor --> </properties> </prototype-object> </pooled-component> </service> </model> </mule>
package com.easyway.mule.spring.httpinvoker.remoting; import org.mule.util.StringUtils; import java.io.Serializable; public class ComplexData implements Serializable { private static final long serialVersionUID = -886414019167115007L; private String someString = "Default String"; private Integer someInteger = new Integer(13); public ComplexData() { super(); } public ComplexData(String someString, Integer someInteger) { super(); setSomeString(someString); setSomeInteger(someInteger); } public String toString() { try { String currentString = StringUtils.defaultIfEmpty(someString, "NULL"); return "[ComplexData: [someString=" + currentString + "][someInteger=" + someInteger + "]]"; } catch (Exception e) { throw new RuntimeException(e); } } public Integer getSomeInteger() { return someInteger; } public void setSomeInteger(Integer someInteger) { this.someInteger = someInteger; } public String getSomeString() { return someString; } public void setSomeString(String someString) { this.someString = someString; } }
package com.easyway.mule.spring.httpinvoker.remoting; /** * A server-side service to receive and process ComplexData. */ public class DoSomeWork implements WorkInterface { public String executeByteArray(byte[] input) { return executeString(new String(input)); } public String executeString(String input) { return "You said " + input; } public ComplexData executeComplexity(ComplexData input) { input.setSomeString(input.getSomeString() + " Received"); input.setSomeInteger(new Integer(input.getSomeInteger().intValue() + 1)); return input; } }
package com.easyway.mule.spring.httpinvoker.remoting; public interface WorkInterface { String executeByteArray(byte[] input); String executeString(String input); ComplexData executeComplexity(ComplexData input); }
服务端测试:
package com.easyway.httpinvoker; import org.mule.api.MuleContext; import org.mule.api.context.MuleContextFactory; import org.mule.config.spring.SpringXmlConfigurationBuilder; import org.mule.context.DefaultMuleContextFactory; /** * * @author longgangbai * */ public class HttpInvokerServer { public static void main(String[] args) { try { // String configFile = "spring-remoting-mule-config-flow.xml"; // String configFile = "spring-remoting-mule-config-service.xml"; String configFile = "spring-remoting-mule-config.xml"; System.setProperty("mule.verbose.exceptions","true"); String[] configFileArr = new String[] {configFile }; MuleContextFactory muleContextFactory = new DefaultMuleContextFactory(); MuleContext muleContext = muleContextFactory .createMuleContext(new SpringXmlConfigurationBuilder(configFileArr)); muleContext.start(); } catch (Exception e) { e.printStackTrace(); } } }
客户端测试:
package com.easyway.httpinvoker; import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; import com.easyway.mule.spring.httpinvoker.remoting.ComplexData; import com.easyway.mule.spring.httpinvoker.remoting.WorkInterface; /** * * @author longgangbai * */ public class HttpInvokerClient { private static final String SPRING_HTTP_ENDPOINT = "http://localhost:8003/springService"; public static void main(String[] args) { ComplexData cd = new ComplexData("Foo", new Integer(13)); HttpInvokerProxyFactoryBean invoker = new HttpInvokerProxyFactoryBean(); invoker.setServiceInterface(WorkInterface.class); invoker.setServiceUrl(SPRING_HTTP_ENDPOINT); invoker.afterPropertiesSet(); WorkInterface worker = (WorkInterface)invoker.getObject(); ComplexData data = worker.executeComplexity(cd); System.out.println(data.getSomeString()); System.out.println(data.getSomeInteger()); } }
相关推荐
`mule-spring-configuration.dtd`和`mule-configuration.dtd`是Mule ESB的XML配置文件的DTD(文档类型定义),它们规定了XML配置文件的结构和元素。Spring是Mule ESB的核心组件之一,负责管理对象的生命周期和依赖...
根据提供的文件内容,以下是关于Mule ESB手册-中文版的知识点: 1. Mule ESB简介 ...通过这些知识点的学习,可以加深对Mule ESB的使用方法的理解,并通过实例加深对ESB概念的理解,对新手来说非常有帮助。
- **强大的社区支持:** 整合了许多流行的开源项目,如Spring、ActiveMQ、CXF等。 - **与JBI容器的兼容性:** 尽管Mule不直接基于JBI构建,但它提供了JBI适配器以便更好地与JBI容器协作。 - **高度可定制化:** ...
MULE ESB(Mule Enterprise Service Bus)是Anypoint Platform的核心组件,它是一个强大的、全面集成的企业服务总线(ESB),专为构建、部署和管理API和集成解决方案而设计。MULE ESB-4.1是MuleSoft公司推出的企业版...
在本篇“Mule ESB 学习笔记(13)CSV数据文件到数据库”中,我们将探讨如何使用Mule ESB(Enterprise Service Bus,企业服务总线...通过实践和学习,我们可以更好地掌握Mule ESB在实际项目中的应用,提升我们的IT技能。
Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个应用, 使得它们可以交换数据。 Mule ESB 容易集成现有异构系统,包括:JMS, Web Services, JDBC, HTTP, 等. ESB...
Mule ESB 是一个基于 Java 的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。Mule ESB 支持集成现有系统而无论其底层采用何种技术,如 JMS、Web Services、JDBC、HTTP...
五、学习和使用Mule ESB "MuleESB3"这个文件名可能指的是Mule ESB的第三个主要版本。在该版本中,用户可以期待更完善的特性和改进。对于初学者,建议首先通过官方文档了解Mule ESB的基本概念和工作原理,然后使用Any...
- **传输协议支持**:Mule ESB 3.0支持20多种传输协议,确保了广泛的互操作性和灵活性。 - **与JBI容器的整合**:虽然Mule ESB不是基于JBI构建的,但它提供了JBI适配器,以便更好地与JBI容器协同工作。 #### 三、...
通过《Mule ESB 3.0 中文教程》,你将能够掌握Mule ESB的基础知识,理解其核心概念,并具备开发和管理Mule ESB应用的能力。随着学习的深入,你还将了解到更多高级特性和实践技巧,为你的IT职业生涯添加一项重要的...
6. **与Spring框架的集成**:Mule ESB可以作为ESB容器运行,也可以方便地嵌入到Spring应用程序中,利用Spring的IoC(控制反转)和DI(依赖注入)特性。 7. **基于SEDA(Staged Event-Driven Architecture)的处理...
`APDevFundamentals3.8_studentManual_20jun2016【翻译狗www.fanyigou.com】.pdf` 文件表明了用户可能利用这个平台将英文版的手册翻译成中文,以便于国内的开发者理解和学习。 总结起来,这个压缩包提供的资源对于...
《Mule ESB Cookbook随书源码》是一个与Mule ESB相关的实践指南,它包含了大量实例代码,旨在帮助读者深入理解和应用Mule ESB这一开源企业服务总线(Enterprise Service Bus)。Mule ESB是业界广泛采用的ESB解决方案...
《Mule ESB 开发手册》是一份详尽的指南,专为希望深入了解并掌握 Mule ESB(Enterprise Service Bus)技术的...通过深入学习和实践,开发者可以充分利用 Mule ESB 的强大功能,实现高效、可靠的企业级集成解决方案。
本教程将带您入门Mule ESB项目,通过实例学习其核心概念和操作。 首先,我们需要理解ESB的基本概念。ESB作为一个中间件,它的主要作用是提供一种松耦合的方式,使得各个系统之间可以通过标准接口进行通信,而不是...
MULE ESB-4.1社区版是Mulesoft为开发者提供的免费版本,它包含了基本的ESB功能,适合学习、开发和小规模项目部署。 在MULE ESB-4.1社区版中,主要包含以下几个关键组件和概念: 1. **AnyPoint Studio**: AnyPoint ...
总结来说,《Mule ESB 3用户指南》为用户提供了一个全面的、步骤详细的、实践导向的指导,从基础的配置、服务集成到开发、测试、文档编写和云服务集成,覆盖了使用Mule ESB进行企业级集成应用开发的各个阶段。
MuleESB是一个基于Java的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。MuleESB支持集成现有系统而无论其底层采用何种技术,如JMS、WebServices、JDBC、HTTP以及其他...