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

开源ESB--Mule与CXF的简单实例

    博客分类:
  • ESB
阅读更多
在开源ESB中最活跃的就是Mule和ServiceMix了。为了便于大家更好的了解Mule和CXF,在此我通过一个实例来说明如何在Mule中使用CXF。
1.相关类
  public class Product implements Serializable {
    private String id;
    private String description;
    private int width;
    private int height;

    public Product() {
    }

    public Product(String id, String description, int width, int height) {
        this.id = id;
        this.description = description;
        this.width = width;
        this.height = height;
    }
    //相关的set,get方法。省略
}


@WebService
public interface ProductCatalogService {

    @WebResult(name="item")
    public List<String> listProducts();

    @WebResult(name="product")
    public Product getProductDetail(@WebParam(name="productId") String productId);

}


@WebService(endpointInterface = "com.honno.demo.product.ProductCatalogService",
    serviceName = "ProductCatalogService")
public class ProductCatalogServiceImpl implements ProductCatalogService {
    Map<String, Product> productMap = new HashMap<String, Product>();

    public ProductCatalogServiceImpl() {
        // Load some products
        Product product = new Product("product1", "Square Widget", 10, 10);
        productMap.put(product.getId(), product);
        product = new Product("product2", "Round Widget", 5, 5);
        productMap.put(product.getId(), product);
    }

    public List<String> listProducts() {
        List<String> productListing = new ArrayList<String>();

        Collection<Product> products = productMap.values();
        for (Product p : products) {
            productListing.add(p.getId() + " - " + p.getDescription());
        }

        return productListing;
    }

    public Product getProductDetail(String productId) {
        Product product = null;
        product = productMap.get(productId);
        return product;
    }


2.mule的配置文件
<spring:beans>
        <spring:import resource="catalogContext.xml"/>
    </spring:beans>

    <model name="services">
        <service name="ProductCatalogService">
            <inbound>
                <cxf:inbound-endpoint address="http://localhost:65082/services/ProductCatalogService" />
            </inbound>
            <component>
                <spring-object bean="productCatalogService" />
            </component>
        </service>
    </model>

3.生成wsdl文件
     Mule成功启动后,在ie的地址栏中通过http://localhost:65082/services/ProductCatalogService?wsdl即可查看wsdl文件。

  <?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://product.demo.honno.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ProductCatalogService" targetNamespace="http://product.demo.honno.com/">
  <wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://product.demo.honno.com/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://product.demo.honno.com/">
<xs:complexType name="product">
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element name="height" type="xs:int"/>
<xs:element minOccurs="0" name="id" type="xs:string"/>
<xs:element name="width" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:element name="listProducts" type="listProducts"/>
<xs:complexType name="listProducts">
<xs:sequence/>
</xs:complexType>
<xs:element name="listProductsResponse" type="listProductsResponse"/>
<xs:complexType name="listProductsResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="item" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="getProductDetail" type="getProductDetail"/>
<xs:complexType name="getProductDetail">
<xs:sequence>
<xs:element minOccurs="0" name="productId" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="getProductDetailResponse" type="getProductDetailResponse"/>
<xs:complexType name="getProductDetailResponse">
<xs:sequence>
<xs:element minOccurs="0" name="product" type="product"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
  </wsdl:types>
  <wsdl:message name="getProductDetailResponse">
    <wsdl:part element="tns:getProductDetailResponse" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="listProductsResponse">
    <wsdl:part element="tns:listProductsResponse" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="listProducts">
    <wsdl:part element="tns:listProducts" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="getProductDetail">
    <wsdl:part element="tns:getProductDetail" name="parameters">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="ProductCatalogService">
    <wsdl:operation name="listProducts">
      <wsdl:input message="tns:listProducts" name="listProducts">
    </wsdl:input>
      <wsdl:output message="tns:listProductsResponse" name="listProductsResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="getProductDetail">
      <wsdl:input message="tns:getProductDetail" name="getProductDetail">
    </wsdl:input>
      <wsdl:output message="tns:getProductDetailResponse" name="getProductDetailResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="ProductCatalogServiceSoapBinding" type="tns:ProductCatalogService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="listProducts">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="listProducts">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="listProductsResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="getProductDetail">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="getProductDetail">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="getProductDetailResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="ProductCatalogService">
    <wsdl:port binding="tns:ProductCatalogServiceSoapBinding" name="ProductCatalogServiceImplPort">
      <soap:address location="http://localhost:65082/services/ProductCatalogService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

4.生成客户端
    通过wsdl我们就可以生成客户端代码,对webservice进行调用了。

更多内容,包括更加详细的源代码,见[url] http://www.opensourceforce.org/?fromuid=217 [/url] (Mule的版块中可以找到相关代码)。
欢迎大家交流。
分享到:
评论
1 楼 toby2007 2009-03-11  
看来半天这个例子,没发现mule有什么用途呀。使用任意WebService发布服务都可以达到这种效果,mule做了什么呢?
我刚开始研究mule,问个不成熟的问题,mule到底怎么使用呢?集成现有的项目就是把mule的lib加到项目里,加个mule-config.xml配置文件吗?还是需要把编译的服务组件class都拷到mule的加载目录?

相关推荐

    esb-mule系统设计

    **ESB(企业服务总线)** ...总之,"esb-mule系统设计"的学习资料涵盖了ESB的基本概念、MULE ESB的特性和使用、SOA架构的优势,以及MULE与SPRING的整合。通过深入学习和实践,你将能够构建高效的企业服务集成解决方案。

    MULE ESB-4.1企业版运行环境

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

    mule-standalone-3.9.0.zip

    - **转换能力**:Mule ESB支持数据格式转换,如XML到JSON,使得不同系统间的数据交换更加简单。 - **流处理**:通过数据流,Mule可以定义处理逻辑,实现数据的接收、转换和发送。 - **安全集成**:Mule ESB提供了...

    有关ESB相关资料---mule---servicemix

    收集了一些esb的资料,包括mule,servicemix等开源esb的使用等。

    MULE ESB-4.1社区办运行环境

    7. **Deployment**: 部署Mule应用程序到MULE ESB-4.1运行环境非常简单。在描述中提到,只需将AnyPoint Studio开发的项目放到`APPS`目录下,Mule服务器会自动识别并加载这些应用程序。 在实际应用中,用户可以通过...

    一步步了解ESB (二) Mule ESB-Basic Studio Tutorial

    Mule ESB提供了大量的连接器,如JMS、FTP、数据库等,这些连接器允许Mule与各种系统进行通信。在Mule Studio中,你可以通过配置连接器的属性来建立连接。同时,Mule还支持数据转型,允许你将输入消息转化为适合目标...

    Mule ESB手册-中文版

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

    MuleEsb开源框架简介.pdf

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

    mule -esb 源码

    本文将围绕Mule ESB的源码进行深入探讨,揭示其核心设计理念与工作原理。 首先,`logging.conf`是日志配置文件,它定义了Mule ESB的日志记录行为。在Mule中,日志系统是至关重要的,因为它提供了一种跟踪和调试应用...

    ESB-Mule开源文档(PDF)

    ### ESB-Mule开源文档知识点概述 #### 一、引言 Mule 是一款非常流行的集成平台,由 MuleSoft 开发,它提供了一个企业级的服务总线 (Enterprise Service Bus, ESB) 和一个用于构建服务导向架构 (Service-Oriented ...

    wso2esb-5.0.0.zip

    【描述】"wso2" 简单地提及了WSO2公司,这是一家专注于开放源代码中间件的公司,提供了一系列的产品,包括ESB、API Manager、Identity Server等,广泛应用于企业级服务集成和API管理。 【标签】"wso2" 进一步确认了...

    ESB开源系统mule

    开源ESB框架 Mule 2增加了基于Schema的spring xml配置,用于集成传统的web应用。表达式赋值被内建在运行时的消息传递中,因此头信息,Xquery或是其他的测试可以很容易的完成,不需要新建POJO或是这些活动转换器。

    ESB原理及Mule ESB实践

    **Mule ESB**是一个基于Java的开源集成平台,专注于为企业提供高性能且易于使用的集成解决方案。Mule的设计理念源自于EIP(Enterprise Integration Patterns),并且支持广泛的传输协议。 1. **Mule ESB组成结构** ...

    wso2esb-tooling-composite-p2-5.0.0.zip

    官网下载,Eclipse插件:WSO2 ESB tooling,适配WSO2 ESB 5.0.0。 仅 Eclipse Mars.2 Release (4.5.2) 版本可使用(我用的是Eclipse JEE Mare.2)。 如果需要Eclipse汉化,必须先安装 WSO2 ESB tooling,再安装...

    ESB解决方案-mule分享.docx

    ### 主流商业与开源ESB一览 在当前市场中,存在多种类型的ESB产品,既包括商业版也涵盖开源版本,这些产品来自不同的厂商,各具特色: - **商业产品** - Oracle提供的ESB解决方案,以其强大的功能和稳定性著称。 ...

    Mule ESB Studio 3.3中文使用手册(官方翻译)

    Mule ESB Studio 3.3 中文使用手册(官方翻译) Mule ESB Studio 3.3 是一款功能强大且灵活的集成平台,旨在帮助开发者快速构建、部署和管理企业级集成解决方案。该手册旨在指导用户如何安装、配置和使用 Mule ESB ...

    MuleEsb开源框架简介

    ### MuleEsb开源框架详解 #### 一、MuleEsb框架概览 Mule Enterprise Service Bus(ESB)是一种先进的开源框架,专为现代企业的集成需求设计。Mule ESB的核心价值在于其强大的连接性和灵活性,使企业能够轻松整合...

Global site tag (gtag.js) - Google Analytics