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

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 可以获知所有可用的转换器。

猜你喜欢

转载自yangzhonglei.iteye.com/blog/2155232
今日推荐