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>