天天看點

Mule ESB的filter

1. filter的作用

    filter指定了能夠被service轉發(routed)或是進一步被flow所處理的message所需要滿足的條件。

2. filter分類

    Mule3的使用者開發手冊中,将filter分為三大類:Standard Filters、Transport and Module Filters、Custom Filters。

    2.1 Standard Filters

    結構:

    |-Payload Type Filter

    |-Expression Filter

       |-- XPath Expressions

       |-- JXPath Expressions

       |-- OGNL Expressions

    |-RegEx Filter

    |-Wildcard Filter

    |-Exception Type Filter

    |-Message Property Filter

    |-Logic Filters

       |-- And Filter

       |-- Or Filter

       |-- Not Filter

    2.1.1 Payload Type Filter

        檢查payload對象的類型,如:

        <payload-type-filter expectedType="java.lang.String">

    2.1.2 Expression Filter

        使用evaluator屬性指定expression evaluator——以下中的一個:header, payload-type, exception-type, wildcard, regex, ognl, xpath, jxpath, bean, groovy, custom。

        使用expression屬性設定實際的表達式:

            如果evaluator是xpath, bean, ognl中的一個,expression是boolean類型的;

            如果evaluator是custom,需要使用customEvaluator指定一個已經被mule注冊的自定義表達式。

        xpath: <expression-filter evaluator="xpath" expression="(msg/header/resultcode)='success'">

        jxpath: <expression-filter evaluator="jxpath" expression="(msg/header/resultcode)='success'">

        ongl: <expression-filter evaluator="ognl" expression="[MULE:0].equals(42)"/>  或  <ognl-filter expression="[MULE:0].equals(42)"/>

    2.1.3 RegEx Filter

        對message的payload使用正規表達式比對,payload需要支援toString方法,是以可以使用AndFilter結合PayloadTypeFilter校驗payload的類型。

        <regex-filter pattern="the quick brown (.*)"/>

    2.1.4 Wildcard Filter

        使用通配符對massage的payload進行比對,payload需要支援toString方法,是以可以使用AndFilter結合PayloadTypeFilter校驗payload的類型。

        <wildcard-filter pattern="the quick brown *"/>

    2.1.5 Exception Type Filter

        一個比對異常類型的filter。

        <exception-type-filter expectedType="java.lang.RuntimeException"/>

    2.1.6 Message Property Filter

        該filter支援基于message property屬性的業務邏輯過濾,這個過濾器非常強大,這時因為message的properties屬性是對外公開的,使用者可以自定義property的屬性。

        屬性比對預設是大小寫敏感的,可以通過caseSensitive進行修改,如:

        <message-property-filter pattern="Content-Type=text/xml" caseSensitive="false"/>

    2.1.7 Logic Filters

        Logic Filters包含三類:And, Or, and Not。由于它可以嵌套其他的filter,是以filter的邏輯可以進行組合。

        And Filter: 

        <and-filter>

        <payload-type-filter expectedType="java.lang.String"/>

        <regex-filter pattern="the quick brown (.*)"/>

        </and-filter>

        Or Filter:

        <or-filter>

        <payload-type-filter expectedType="java.lang.String"/>

        <payload-type-filter expectedType="java.lang.StringBuffer"/>

        </or-filter>

        Not Filter:

        <not-filter>

        <payload-type-filter expectedType="java.lang.String"/>

        </not-filter>

    2.2 Transport and Module Filters

        一些mule的transports和子產品提供的自己的filter。這塊的内容比較多,有時間單獨介紹。

    2.3 Custom Filters

        當以上filter不能滿足客戶的需求時,你可以自定義filter。自定義filter需要實作Filter接口,該結構隻包含一個方法:

        public boolean accept(MuleMessage message);

        當傳回結果為true時,filter通過,否則沒有通過。

<outbound>
<filtering-router>
<cxf:outbound-endpoint address="http://localhost:65071/services/EnterOrder?method=create"
synchronous="true"/>
<custom-filter class="org.mule.transport.http.filters.HttpRequestWildcardFilter">
<spring:property name="pattern" value="/services/EnterOrder?wsdl"/>
</custom-filter>
</filtering-router>
</outbound>