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>