序列中的自定义介体仅在WSO2启动时运行

时间:2013-06-20 09:33:41

标签: wso2 wso2esb

我制作了一个自定义中介,只需打印“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文件夹时,如何调用序列?

谢谢,

2 个答案:

答案 0 :(得分:1)

我认为它按预期工作,但我认为你错过了解它如何运作你的自定义调解员。您看到的消息是init方法显示的消息,这是在创建调解器时。

每次在文件夹中保留文件时,此介体都会运行,但是当它发生时启动的方法是“mediator”方法,该实现不执行任何操作(retrun false)。所以你应该将调解器方法实现为

public boolean mediate(MessageContext arg0) {
    hellowWorld();
    return false;
}

它将显示您所期望的消息。

希望它有效!

答案 1 :(得分:1)

你应该在mediate方法()中调用你的逻辑。并使返回值为true。如果将其设为false,则中介引擎将在中介流程中返回false,并在消息流中产生问题。 您可以查看此sample