我制作了一个自定义中介,只需打印“Hello World”,我的自定义中介就像这样:
public class HelloWorld extends AbstractMediator implements ManagedLifecycle{
public static void helloWorld() {
System.out.println("Hello World");
}
public void init(SynapseEnvironment synapseEnvironment) {
// initializing surcharges map with some symbols
helloWorld();
}
public void destroy() {
// clearing the surcharges contents
}
@Override
public boolean mediate(MessageContext arg0) {
// TODO Auto-generated method stub
return false;
}
}
我按顺序称这个类为“Hello”:
<sequence name="Hello">
<class name="com.exec.HelloWorld">
</class>
我在代理中使用这个序列,如下所示:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="FileProxy" transports="vfs" startOnLoad="true" trace="disable">
<target>
<inSequence>
<log level="full"/>
<target sequence="Hello"/>
</inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.PollInterval">15</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file:///Users/Source</parameter>
<parameter name="transport.vfs.FileURI">file:///Users/Target/</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.txt</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>
我希望每次在Source文件夹中放置一个文件(* .txt)都会调用我的序列。但问题是序列只被调用一次(当wso2 esb启动时)。每次将文件放入Source文件夹时,如何调用序列?
谢谢,
答案 0 :(得分:1)
我认为它按预期工作,但我认为你错过了解它如何运作你的自定义调解员。您看到的消息是init方法显示的消息,这是在创建调解器时。
每次在文件夹中保留文件时,此介体都会运行,但是当它发生时启动的方法是“mediator”方法,该实现不执行任何操作(retrun false)。所以你应该将调解器方法实现为
public boolean mediate(MessageContext arg0) {
hellowWorld();
return false;
}
它将显示您所期望的消息。
希望它有效!
答案 1 :(得分:1)
你应该在mediate方法()中调用你的逻辑。并使返回值为true。如果将其设为false,则中介引擎将在中介流程中返回false,并在消息流中产生问题。 您可以查看此sample