Mule的第一个应用非常简单。却也可以看出Mule的运行机制。上例中,实现的是Hello world 的例子,过程为:用户输入内容,回车,然后显示Hello,[输入的内容]。这个实现非常简单,但是,却也存在一些问题,mule是怎么知道显示这些内容的,现在就研究这个。
也许大家觉得,在XXXX.xml中已经配置了类路径,mule当然可以找到这个类,问题就在这里,mule找到了实现类,那他是如何找到对应的方法的呢?OK,做一下尝试
1、尝试一
将inteface修改为:
实现类修改为:
运行项目:运行成功!
2、尝试二
修改interface为:
修改实现类为:
运行:抛出ERROR
3、尝试三
修改interface:
修改实现类:
运行:抛出ERROR
结论:
比较两次抛出的ERROR,不难发现这句话“
Could not find entry point on: "demo.mule.umo.impl.HelloWorldImpl" with arguments: "{class java.lang.String}" using resolver "ReflectionEntryPointResolver{ignoredMethods=[getClass, clone, equals, hashCode, getInvocationHandler, get*, wait, is*, notify, toString, notifyAll]{transformFirst=true, acceptVoidMethods=false}"
”,真相大白:mule通过<inbound></inbound>中得到的结果,作为寻找方法中参数的依据,由于该项目中,从终端输入的内容,项目接收时为String类型,因此,mule将查找参数类型为String的方法,同时,mule将抛弃所有符合“getClass, clone, equals, hashCode, getInvocationHandler, get*, wait, is*, notify, toString, notifyAll”的方法,如果符合条件的只有一个,那正好调用,否则,就抛出ERROR。
如果程序中很可以确定是哪个方法,大可让他自己去找,成人之美,若是不能确定是哪个方法,那么就只能够指腹为婚了,进行如下配置:
将尝试二的配置文件修改为:
设置方法切入点,运行,成功!