Mule ESB中entry-point-resolver的使用(6) No Argument Entry Point Resolver

No Arguments Entry Point Resolver是定位Component類中的無參數方法的.Entry Point Resolver默認會忽略掉繼承自Object類的notify(),toString()等方法。配置No Arguments Entry Point Resolver的代碼以下java

<no-arguments-entry-point-resolver  acceptVoidMethods="true" />

若是想排除掉某些方法,能夠使用exclude-entry-point標籤,不過這種狀況下默認對Object類的方法的忽略將會失效,須要添加<exclude-object-methods />節點code

<no-arguments-entry-point-resolver  acceptVoidMethods="true">
 <exclude-entry-point method="xxxx" />
</no-arguments-entry-point-resolver>

若是想要在指定方法中進行匹配,能夠使用include-entry-point標籤xml

<no-arguments-entry-point-resolver  acceptVoidMethods="true">
 <include-entry-point method="xxxx" />
</no-arguments-entry-point-resolver>

咱們在TestComponent中添加兩個無參數的方法繼承

public void NoArgumentEntryPointMethod1()
{
	logger.info("NoArgumentEntryPointMethod is executed");
}
	
public void NoArgumentEntryPointMethod2()
{
	logger.info("NoArgumentEntryPointMethod2 is executed");
}

在流程中使用如下配置get

<no-arguments-entry-point-resolver  acceptVoidMethods="true" />

啓動項目後,能夠看到因爲有兩個方法匹配,拋出了異常hash

NoArgumentsEntryPointResolver: Found too many possible methodsit

咱們加入exclude-entry-point節點忽略掉NoArgumentEntryMethod1方法io

<no-arguments-entry-point-resolver  acceptVoidMethods="true" >
  <exclude-object-methods />
  <exclude-entry-point method="NoArgumentEntryPointMethod1" />
</no-arguments-entry-point-resolver>

這裏若是不加exclude-object-methods節點,會拋出異常class

Found too many possible methods on object "entrypointresolvertest.TestComponent" that accept parameters "{}", Methods matched are "[public void entrypointresolvertest.TestComponent.NoArgumentEntryPointMethod2(), public final void java.lang.Object.wait() throws java.lang.InterruptedException, public java.lang.String java.lang.Object.toString(), public native int java.lang.Object.hashCode(), public final native java.lang.Class java.lang.Object.getClass(), public final native void java.lang.Object.notify(), public final native void java.lang.Object.notifyAll()]"test

從異常信息能夠看出,Object類的一系列無參數方法也進入了匹配方法列表,從而會拋異常。

設置好後再啓動項目,能夠看到NoArgumentEntryMethod2方法被匹配執行

咱們再使用include-entry-point節點,匹配NoArgumentEntryMethod1方法

<no-arguments-entry-point-resolver  acceptVoidMethods="true" >
     <include-entry-point method="NoArgumentEntryPointMethod1"/>
</no-arguments-entry-point-resolver>

啓動項目,能夠看到NoArgumentEntryMethod1方法被匹配執行

相關文章
相關標籤/搜索