前面的系列介绍了Mule ESB提供和用户自定义的Entry Point Resolver,如果我们在实际使用中需要用到多个Entry Point Resolver进行Entry Point 匹配时,我们需要使用Entry Point Resolver Set。
Mule ESB提供的Entry Point Resolver Set包含两种,一种是系统默认的Entry Point Resolver Set:
Legacy Entry Point Resolver Set,它包含了实现标准逻辑的Entry Point Resolver,这些Resolver包括
- Annotation Entry Point Resolver
这个Entry Point Resolver前面没有提到,它主要是用于解析带有@Service标签的Component类的方法,匹配的方法所有的参数都需要有Mule Expression Language注解,例如以下的方法
public Object method1(@XPath ("/foo/bar")String bar,
@Payload Document doc, @InboundHeaders("name")String name)
{
........
}
这个方法的所有参数就包含了MEL注解@XPath, @Payload, @InboundHeader。第一个注解表示从Document类型的Payload中根据XPath “/foo/bar"获取的节点文本。第二个注解表示将Mule Message的Payload赋给参数doc,第三个注解表示从Mule inbound property中读取name属性,赋给参数name。
如果Component中符合注解要求的方法多于一个,需要在Mule inbound property中设置"method" property,指定匹配的方法名。
- Property Entry Point Resolver
- Callable Entry Point Resolver
- Reflection Entry Point Resolver
Legacy Entry Point Resolver Set默认包含这些Entry Point Resolver,如果需要添加其他的entry point resolver,可以使用legacy-entry-point-resolver-set标签
<legacy-entry-point-resolver-set>
<xxx-entry-point-resolver />
</legacy-entry-point-resolver-set>
另一种Entry Point Resolver Set是Entry Point Resolver Set,是为用户自定义指定Resolver指定的Set,用户可以像以下方式使用
<legacy-entry-point-resolver-set>
<xxx-entry-point-resolver />
<xxxx-entry-point-resolver />
</legacy-entry-point-resolver-set>
无论是Legacy Entry Point Resolver Set,还是Entry Point Resolver Set,匹配Entry Point时逐一使用Set中定义的Resolver进行匹配,如果匹配失败,记入异常信息,继续使用下一个Resolver进行匹配,直到找到第一个匹配的Entry Point执行,或者所有的Entry Point Resolver都匹配完毕,没有找到匹配的Entry Point。
具体实现代码如下
来源:oschina
链接:https://my.oschina.net/u/237688/blog/733536