欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mule in action翻译23: 4.2 配置转换器

程序员文章站 2022-06-17 19:31:48
...

mule in action翻译23: 4.2配置转换器

    在我们讨论如何使用转换器之前,我们应当先讨论它的作用域和它的常见配置属性。像在第三章中讨论的

endpoints一样,转换器也可以配置为本地的和全局的。例如在下面的 列表4.1中,这个流中有一个VM inbound  endpoint--这是一个本地endpoint,这个流对输入进行了base64编码。

 

Listing4.1 Encoding a payload in Base64

 

<flowname="base64-flow">
<vm:inbound-endpointpath="base64.in" 
      exchange-pattern="requestresponse"/>
<base64-encoder-transformer/>
</flow>

 

 

     这个转换器被认为是本地的,因为它没有"name"属性,并且不能被引用。这样的配置比较简短。但要是你的配置不是短短的一两屏的长度,或者当你有个转换器需要在别的流*享时,你再使用如上面的简短配置你将难以弄清你使用的不同的转换器,而且你可能失去在不同地方重用一些转换器的机会。当你的配置文件开始增长时,最好是配置全局转换器,而在你endpoint引用他们。如果是为了使配置简洁,则经常使用本地转换器的方式。

 

    下面的配置片段展示了一个全局转换器的配置--一个对象转为二进制数组的转换器(我们将在4.2.1中详细讨论)。

    

<object-to-byte-array-transformername="ObjectToByteArray" />

 

 

   现在你明白了如何声明基本的转换器,下面学习如何配置它。

   当配置转换器时,你应当考虑下面四个常用的配置属性:

1、ignoreBadInput:这个布尔型属性的用途,在图标4.1中提到过。这个属性用来设置,当输入类型不是支

                                 持的类型时,将什么都不做而返回原样的消息。

2、returnClass:这个属性允许你来设置转换器将返回的类型的全限定名。当你不想使用转化器的默认类型

                           而要严格限制类型时,这是比较有用的(例如,一个转换器的目标类型可能是

                           java.lang.Object ,而你却要强制它处理java.util.Map类型的object)

3、encoding:表示转换结果将使用指定的编码方式。在处理不是使用Unicode的老系统时,这是比较有用的

                        这只对 类似string-tobyte-array-transformer 的输出要进行编码的转换器才是有用的。

4、mimeType:有时只设置返回类型和进行编码设置不足以解决问题;这些情况下,设置一个额外的MIME

                         可能是有用的。例如一个UTF-8的字符串,它可能是text/plain的,也可能是

                         text/tab-separated,也可能是其他的。

 

     值得强调的是,上面这些并不是一个转换器可配置的全部属性;各种转换器可能还有其他的配置属性。

例如,xslt-transformer有 xsl-file属性,jaxbobject-to-xml-transformer需要jaxbContext-ref属性。我们将分别在 4.4.2 和4.4.3章节讨论这些转换器。

 

     现在你明白了如何配置一个转换器,现在我们把它们串成链来玩一下。有两种方式串成链:你可以把他们

按需要的顺序放在流里,或者你可以使用 transformer-refs元素设置以空格分割的多个转换器引用列表。

在下面的列表中来看两种风格的使用。

Listing4.2 Two styles of references to declare a chain of three transformers

 

<object-to-byte-array-transformername="objectToByteArray" />
<object-to-string-transformername="objectToString"/>
<mulexml:xslt-transformer name="prancingToBM" xsl-file="xsl/prancing-to-gondor-bm.xsl"/>
     <flowname="transformerRefsFlow">
          <!--使用空格分割的 引用列表-->
          <http:inbound-endpoint 
                       host="localhost" 
                       port="8080"
            transformer-efs="objectToByteArray prancingToBM objectToString"/>
     <loggermessage="Messagereceived!"/>
</flow>

<flowname="transformerFlow">
      <http:inbound-endpoint host="localhost"  port="8081"/>
      <!--使用transformer列表 引用元素-->
      <transformerref="objectToByteArray"/>
      <transformerref="prancingToBM"/>
      <transformerref="objectToString"/>
      <loggermessage="Messagereceived!"/>
</flow>

 

 

  第二种方式更稳妥一些,因为使用一些高级的xml编辑器可以检查每个独立的转换器引用,而引用列表的方式只有在运行时mule加载配置的时候才进行检查。

 

   你现在获得了足够的关于配置和使用转换器的知识,下节探讨一些重要的转换器。

     最佳实践:查看mule API 中的org.mule.api.transformer.Transformer 可以获知所有可用的转换器。

 

 

 

相关标签: mule esb