Mule ESB中entry-point-resolver的使用(5) Reflection Entry Point Resolver

   Reflection Entry Point Resolver是根據Mule Message的Payload參數類型匹配entry point的。配置代碼以下 java

<reflection-entry-point-resolver acceptVoidMethods="true" />

若是存在多個符合條件的entry point,將會拋出異常信息code

ReflectionEntryPointResolver: Found too many possible methods on object 
"entrypointresolvertest.TestComponent" that accept parameters "{class java.lang.String}"

這是由於咱們在TestComponent中配置了不止一個參數類型爲String的方法,所以會出現匹配多個entry point的異常。xml

public void MethodEntryPointMethod1(String message)
{
	logger.info("MethodEntryPointMethod1's message is:" + message);
}
	
public void MethodEntryPointMethod2(String message)
{
	logger.info("MethodEntryPointMethod2's message is:" + message);
}

public void PropertyEntryPointMethod(String message)
{
   logger.info("PropertyEntryPointMethod's message is:" + message);
}

若是咱們只想匹配某一個方法時,能夠把其餘匹配的方法設置爲排除方法繼承

<reflection-entry-point-resolver acceptVoidMethods="true" >
   <exclude-entry-point method="MethodEntryPointMethod1"  />
   <exclude-entry-point method="MethodEntryPointMethod2" />
</reflection-entry-point-resolver>

再運行程序,能夠看到前兩個方法在匹配entry point時被忽略了,只匹配了PropertyEntryPointMethod方法  io

Relection Entry Point Resolver還能夠使用exclude-object-methods,這個子節點主要是用於排除自定義Component類繼承的Object父類的toString(),notify()等方法。Mule ESB默認是使用這個子節點的,可是若是使用了exclude-entry-point子節點後,這個設定會失效,須要手動添加exclude-object-methods子節點class

<reflection-entry-point-resolver acceptVoidMethods="true" >
     <exclude-entry-point method="MethodEntryPointMethod1"  />
     <exclude-entry-point method="MethodEntryPointMethod2" />
     <exclude-object-methods />
</reflection-entry-point-resolver>
相關文章
相關標籤/搜索