`
longgangbai
  • 浏览: 7338863 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Mule ESB 学习笔记(20)Mule和Spring httpinvoker的整合

阅读更多

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 -esb 源码

    `mule-spring-configuration.dtd`和`mule-configuration.dtd`是Mule ESB的XML配置文件的DTD(文档类型定义),它们规定了XML配置文件的结构和元素。Spring是Mule ESB的核心组件之一,负责管理对象的生命周期和依赖...

    Mule ESB手册-中文版

    根据提供的文件内容,以下是关于Mule ESB手册-中文版的知识点: 1. Mule ESB简介 ...通过这些知识点的学习,可以加深对Mule ESB的使用方法的理解,并通过实例加深对ESB概念的理解,对新手来说非常有帮助。

    ESB原理及Mule ESB实践

    - **强大的社区支持:** 整合了许多流行的开源项目,如Spring、ActiveMQ、CXF等。 - **与JBI容器的兼容性:** 尽管Mule不直接基于JBI构建,但它提供了JBI适配器以便更好地与JBI容器协作。 - **高度可定制化:** ...

    MULE ESB-4.1企业版运行环境

    MULE ESB(Mule Enterprise Service Bus)是Anypoint Platform的核心组件,它是一个强大的、全面集成的企业服务总线(ESB),专为构建、部署和管理API和集成解决方案而设计。MULE ESB-4.1是MuleSoft公司推出的企业版...

    Mule ESB 学习笔记(13)CSV数据文件到数据库

    在本篇“Mule ESB 学习笔记(13)CSV数据文件到数据库”中,我们将探讨如何使用Mule ESB(Enterprise Service Bus,企业服务总线...通过实践和学习,我们可以更好地掌握Mule ESB在实际项目中的应用,提升我们的IT技能。

    mule IDE (mule ESB)

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

    MuleEsb开源框架简介.pdf

    Mule ESB 是一个基于 Java 的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。Mule ESB 支持集成现有系统而无论其底层采用何种技术,如 JMS、Web Services、JDBC、HTTP...

    MuleESB帮助文档

    五、学习和使用Mule ESB "MuleESB3"这个文件名可能指的是Mule ESB的第三个主要版本。在该版本中,用户可以期待更完善的特性和改进。对于初学者,建议首先通过官方文档了解Mule ESB的基本概念和工作原理,然后使用Any...

    MuleESB3.0中文教程

    - **传输协议支持**:Mule ESB 3.0支持20多种传输协议,确保了广泛的互操作性和灵活性。 - **与JBI容器的整合**:虽然Mule ESB不是基于JBI构建的,但它提供了JBI适配器,以便更好地与JBI容器协同工作。 #### 三、...

    MuleESB_3.0_中文教程

    通过《Mule ESB 3.0 中文教程》,你将能够掌握Mule ESB的基础知识,理解其核心概念,并具备开发和管理Mule ESB应用的能力。随着学习的深入,你还将了解到更多高级特性和实践技巧,为你的IT职业生涯添加一项重要的...

    mule esb 的简单介绍

    6. **与Spring框架的集成**:Mule ESB可以作为ESB容器运行,也可以方便地嵌入到Spring应用程序中,利用Spring的IoC(控制反转)和DI(依赖注入)特性。 7. **基于SEDA(Staged Event-Driven Architecture)的处理...

    Mule ESB开发工具以及相匹配的英文手册和中文手册(翻译狗充值翻译)

    `APDevFundamentals3.8_studentManual_20jun2016【翻译狗www.fanyigou.com】.pdf` 文件表明了用户可能利用这个平台将英文版的手册翻译成中文,以便于国内的开发者理解和学习。 总结起来,这个压缩包提供的资源对于...

    mule esb cookbook 随书源码

    《Mule ESB Cookbook随书源码》是一个与Mule ESB相关的实践指南,它包含了大量实例代码,旨在帮助读者深入理解和应用Mule ESB这一开源企业服务总线(Enterprise Service Bus)。Mule ESB是业界广泛采用的ESB解决方案...

    mule esb开发手册

    《Mule ESB 开发手册》是一份详尽的指南,专为希望深入了解并掌握 Mule ESB(Enterprise Service Bus)技术的...通过深入学习和实践,开发者可以充分利用 Mule ESB 的强大功能,实现高效、可靠的企业级集成解决方案。

    mule esb 项目 例子 入门

    本教程将带您入门Mule ESB项目,通过实例学习其核心概念和操作。 首先,我们需要理解ESB的基本概念。ESB作为一个中间件,它的主要作用是提供一种松耦合的方式,使得各个系统之间可以通过标准接口进行通信,而不是...

    MULE ESB-4.1社区办运行环境

    MULE ESB-4.1社区版是Mulesoft为开发者提供的免费版本,它包含了基本的ESB功能,适合学习、开发和小规模项目部署。 在MULE ESB-4.1社区版中,主要包含以下几个关键组件和概念: 1. **AnyPoint Studio**: AnyPoint ...

    mule ESB 3 user guider

    总结来说,《Mule ESB 3用户指南》为用户提供了一个全面的、步骤详细的、实践导向的指导,从基础的配置、服务集成到开发、测试、文档编写和云服务集成,覆盖了使用Mule ESB进行企业级集成应用开发的各个阶段。

    MuleESB学习笔记

    MuleESB是一个基于Java的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。MuleESB支持集成现有系统而无论其底层采用何种技术,如JMS、WebServices、JDBC、HTTP以及其他...

Global site tag (gtag.js) - Google Analytics