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

Mule ESB 学习笔记(12)JSON转换器的使用

阅读更多

           在许多情况下,可能需要把类转换为json,或者将json转换为xml,xlst等各种格式.这里简单讲解json和xml,xlst等之间的转换过程.

<?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:json="http://www.mulesoft.org/schema/mule/json"
      xmlns:mxml="http://www.mulesoft.org/schema/mule/xml"
      xmlns:spring="http://www.springframework.org/schema/beans"
      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/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
       http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd">

    <json:is-json-filter name="jsonFilter" validateParsing="true"/>

    <json:mapper name="myMapper">
        <json:mixin mixinClass="com.easyway.esb.mule.json.transformers.FruitCollectionMixin"
                        targetClass="com.easyway.esb.mule.json.transformers.FruitCollection"/>
        <json:mixin mixinClass="com.easyway.esb.mule.json.transformers.AppleMixin"
                        targetClass="com.easyway.esb.mule.json.model.Apple"/>
    </json:mapper>

    <json:json-to-object-transformer name="jsonToFruitCollection" returnClass="com.easyway.esb.mule.json.transformers.FruitCollection"
                                     mapper-ref="myMapper">
        <!-- test augmenting the mixin map with local mixins -->
        <json:deserialization-mixin
                mixinClass="com.easyway.esb.mule.json.transformers.OrangeMixin"
                targetClass="com.easyway.esb.mule.json.model.Orange"/>
    </json:json-to-object-transformer>

    <json:object-to-json-transformer name="fruitCollectionToJson"
                                     sourceClass="com.easyway.esb.mule.json.transformers.FruitCollection">
        <json:serialization-mixin
                mixinClass="com.easyway.esb.mule.json.transformers.FruitCollectionMixin"
                targetClass="com.easyway.esb.mule.json.transformers.FruitCollection"/>
        <json:serialization-mixin
                mixinClass="com.easyway.esb.mule.json.transformers.AppleMixin"
                targetClass="com.easyway.esb.mule.json.model.Apple"/>
        <json:serialization-mixin
                mixinClass="com.easyway.esb.mule.json.transformers.OrangeMixin"
                targetClass="com.easyway.esb.mule.json.model.Orange"/>
    </json:object-to-json-transformer>

    <json:json-to-xml-transformer name="jToX"/>

    <json:xml-to-json-transformer name="xToJ"/>

    <json:json-xslt-transformer name="jToJ">
        <mxml:xslt-text>
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                <xsl:template match="@*|node()">
                    <xsl:copy>
                        <xsl:apply-templates select="@*|node()"/>
                    </xsl:copy>
                </xsl:template>
            </xsl:stylesheet>
        </mxml:xslt-text>
    </json:json-xslt-transformer>

    <json:json-schema-validation-filter name="jvf" schemaLocations="customer.xsd"/>

</mule>

 

 

测试代码:

  XmlToJson transformer = new XmlToJson();
        String jsonResponse = (String) transformer.transform(XML);
        System.out.println("jsonResponse ="+jsonResponse);
        
        StringReader reader = new StringReader(XML);

        transformer = new XmlToJson();
        jsonResponse = (String) transformer.transform(reader);
        System.out.println("jsonResponse ="+jsonResponse);
        
        byte[] bytes = XML.getBytes();
        transformer = new XmlToJson();
        jsonResponse = (String) transformer.transform(bytes);
        System.out.println("jsonResponse ="+jsonResponse);
        
        Document document = XMLUtils.toW3cDocument(XML);
        document.setDocumentURI("xxx");
        transformer = new XmlToJson();
        jsonResponse = (String) transformer.transform(document);
        System.out.println("jsonResponse ="+jsonResponse);
        

  

 

mule-jdbc-json-config.xml:

<?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:quartz="http://www.mulesoft.org/schema/mule/quartz"
       xmlns:jdbc="http://www.mulesoft.org/schema/mule/jdbc"
        xmlns:http="http://www.mulesoft.org/schema/mule/http"
          xmlns:json="http://www.mulesoft.org/schema/mule/json"
      xmlns:https="http://www.mulesoft.org/schema/mule/https"
      xmlns:test="http://www.mulesoft.org/schema/mule/test"
      xsi:schemaLocation="
       http://www.mulesoft.org/schema/mule/test http://www.mulesoft.org/schema/mule/test/current/mule-test.xsd
       http://www.mulesoft.org/schema/mule/jdbc http://www.mulesoft.org/schema/mule/jdbc/current/mule-jdbc.xsd
       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/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd       
       http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
       http://www.mulesoft.org/schema/mule/https http://www.mulesoft.org/schema/mule/https/current/mule-https.xsd       
       http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd">

     <jdbc:mysql-data-source name="MySQL_Data_Source1" url="jdbc:mysql://localhost:3306/dbtest2" user="root" password="root" transactionIsolation="UNSPECIFIED" />
   
    <jdbc:connector name="Database" dataSource-ref="MySQL_Data_Source1" validateConnections="true" queryTimeout="-1" pollingFrequency="0" />
   
    <flow name="httpPostTestFlow1" > 
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="httpPost" ></http:inbound-endpoint>
        <json:json-to-object-transformer  returnClass="java.util.Map"></json:json-to-object-transformer>
        <jdbc:outbound-endpoint exchange-pattern="one-way" queryTimeout="-1"  queryKey="INSERT_TOKEN" connector-ref="Database">
            <jdbc:query key="INSERT_TOKEN" value="insert into user(FirstName) values(#[message.payload.name]);"/>
        </jdbc:outbound-endpoint>   
    </flow>
</mule>

 

服务端代码:
public class JSONJdbcServerMain
{

  public static void main(String[] args) {
      try {
          String configFile = "mule-jdbc-json-config.xml";
          String[] configFileArr = new String[] {configFile };
          MuleContextFactory muleContextFactory = new DefaultMuleContextFactory();
          MuleContext muleContext = muleContextFactory
                  .createMuleContext(new SpringXmlConfigurationBuilder(configFileArr));
          muleContext.start();
      } catch (Exception e) {
          e.printStackTrace();
      }
  
   }
}
 
客户端代码:

                        原来 Java 项目中用的 JSON 组件库主要是 Gson 和 json-lib,Gson 算是很错的库,json-lib 略显寒碜。好啦,最近 Play 2.x 中弃用了 Gson 而采纳了 Jackson,所以现在就来打探一下 Jackson,踩个点吧。

Jackson 号称非常高的性能,听说比另两位兄弟 Gson 和 json-lib 高出一大截,我没有亲测,可是有心人做了,看这个链接 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试) 中的数据。2010 年 8 月份的测试结果,不知现在随着版本的变更是否仍然保持着这种悬殊。

 

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

/**
 * <p>功能描述,该部分必须以中文句号结尾。<p>
 *
 * 创建日期 2013-8-22<br>
 * @author  $Author$<br>
 * @version $Revision$ $Date$
 * @since   3.0.0
 */
public class MuleJSONJdbcClientMain {
    public static void main(String[] args) {
        // 构造HttpClient的实例
        HttpClient httpClient = new HttpClient();
        // 创建GET方法的实例
        PostMethod postMethod = new PostMethod("http://localhost:8081/httpPost");
        // 使用系统提供的默认的恢复策略
        postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
        try {
            // 执行getMethod
            
            //将对象转换JSON
            ObjectMapper mapper = new ObjectMapper();
            mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
            mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
            Map<String,String> paramMap=new HashMap<String,String>();
            paramMap.put("id", "345");
            paramMap.put("name", "xiaobai");
            String jsonx = mapper.writeValueAsString(paramMap);
            
            //将json转换为对象
            Map<?, ?> map = mapper.readValue(jsonx, Map.class);
            System.out.println("map=" + map.toString());
            
            //设置JSON数据信息
            postMethod.setRequestEntity(new StringRequestEntity(jsonx));
            
            //发送http请求
            int statusCode = httpClient.executeMethod(postMethod);
            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("Method failed: " + postMethod.getStatusLine());
            }
            // 读取内容
            byte[] inputStream = postMethod.getResponseBody();
            // 处理内容
            System.out.println("responseBody=" + new String(inputStream, "UTF-8"));
        } catch (HttpException e) {
            // 发生致命的异常,可能是协议不对或者返回的内容有问题
            System.out.println("Please check your provided http address!");
            e.printStackTrace();
        } catch (IOException e) {
            // 发生网络异常
            e.printStackTrace();
        } finally {
            // 释放连接
            postMethod.releaseConnection();
        }
    }
}
  
分享到:
评论
5 楼 ym919202 2014-07-17  
4 楼 ym919202 2014-07-17  
:lol:
3 楼 ym919202 2014-07-17  
2 楼 ym919202 2014-07-17  
            
1 楼 elvenpath 2014-06-06  
都是代码片段。。。我这种水平低的不明白啊。。。能不能发工程包

相关推荐

    Mule ESB手册-中文版

    转换器用于在不同数据格式之间转换消息内容,文档列出了自定义转换器、Object-to-XML/JSON转换器、脚本转换器、XSLT转换器以及Xml/Json-to-Object转换器等。这些转换器支持将消息从一种格式转换成另一种格式。 7. ...

    mule -esb 源码

    最后,`MULE_LICENSE.txt`是Mule ESB的许可协议文件,它详细阐述了软件的使用条款和条件,确保用户合法合规地使用Mule ESB。 综上所述,Mule ESB的源码包含了丰富的组件和配置,从日志记录到企业级服务,再到安全性...

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

    在本篇“Mule ESB 学习笔记(13)CSV数据文件到数据库”中,我们将探讨如何使用Mule ESB(Enterprise Service Bus,企业服务总线)处理CSV(Comma Separated Values,逗号分隔值)数据,并将其有效地导入到数据库中...

    MULE ESB-4.1企业版运行环境

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

    ESB原理及Mule ESB实践

    ### ESB原理及Mule ESB实践 #### ESB(Enterprise Service Bus)原理概述 **ESB**(企业服务总线)是SOA(面向服务架构)架构中的关键组件之一,用于实现服务间的智能集成与管理。其核心作用在于简化不同系统间的...

    mule esb开发手册

    Mule ESB 支持使用注解来创建服务对象和转换器,这是一种更加灵活和简洁的编程方式。注解可以用于声明服务接口、指定消息处理器、绑定输入和输出参数等。常见的注解包括 @Function、@Groovy、@InboundAttachments、@...

    mule ESB 3 user guider

    描述:本手册旨在为用户提供对Mule ESB 3的基础使用指导,强调了Mule ESB作为一个社区成熟且文档丰富的开源企业服务总线(ESB)的使用方法。 知识点说明: 1. Mule ESB概述: Mule ESB是一个开源的中间件平台,...

    MuleESB_3.0_中文教程

    3. **数据转换**:Mule ESB支持多种数据格式的转换,包括XML、JSON、CSV等,确保数据在不同系统间顺畅传递。 **三、Mule ESB 3.0新特性** 1. **改进的性能**:Mule ESB 3.0对引擎进行了优化,提升了处理速度和吞吐...

    mule IDE (mule ESB)

    Mule ESB 是一个轻量级的基于java的企业服务总线和集成平台, 使得开发人员可以快速,简单的连接多个... Mule ESB 包含如下强大的能力: 服务创建和托管— 暴露和托管可重用服务, 使用Mule ESB作为一个轻量级服务容器.

    MuleESB帮助文档

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

    MuleEsb开源框架简介.pdf

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

    MuleESB3.0中文教程

    - **知名用户**:沃尔玛、惠普、索尼、德意志银行、花旗银行等知名企业都在使用Mule ESB。 通过以上内容,可以看出Mule ESB 3.0不仅在技术层面具有很高的成熟度,而且在实际应用中也得到了广泛的认可。无论是对于...

    mule esb 项目 例子 入门

    学习Mule ESB时,还需要了解Anypoint Platform,这是一个全面的集成解决方案,包括Anypoint Studio、Anypoint Exchange(共享连接器和资源的库)、Anypoint Runtime Manager(用于监控和管理Mule应用的运行时环境)...

    mule esb cookbook 随书源码

    通过这个源码库,读者可以实际操作这些示例,加深对Mule ESB工作原理的理解,学习如何解决实际问题,从而提升在企业集成项目中的技能。记住,理论知识和实践经验相结合是掌握复杂技术的关键。因此,仔细研究这些源码...

    MULE ESB-4.1社区办运行环境

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

    mule esb 的简单介绍

    8. **基于EIP(Enterprise Integration Patterns)的事件路由**:Mule ESB利用这些标准模式实现复杂的路由和转换策略,提高数据处理的智能化和自动化程度。 在Mule ESB中,连接器(Connectors)扮演着关键角色,...

    MuleESB学习笔记

    图整体结构从上图可见,Mule通过Transports/Connectors与外围的异构系统连接,提供Routing(路由)、TransactionManagement(事务管理)、Transformation(转换)、MessageBroker(消息代理)、...

    mule esb cookbook 的所有例子代码

    《Mule ESB Cookbook》是一本专注于Mule ESB实用技术的书籍,旨在帮助开发者深入理解和应用Mule ESB这一企业服务总线(Enterprise Service Bus)平台。这本书提供了丰富的示例代码,帮助读者掌握Mule ESB的核心功能...

Global site tag (gtag.js) - Google Analytics