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方法被匹配执行

相关文章
相关标签/搜索