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



我制作了一个简单打印"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>

我希望每次我把一个文件(*.txt)在源文件夹比我的序列将被调用。但问题是该序列只被调用一次(当wso2 esb Startup时)。我怎么能使我的序列被称为每次我把一个文件在源文件夹?

谢谢,

我认为它按预期工作,但我认为您误解了它如何工作您的自定义中介。您看到的消息是由init方法显示的,这是创建中介器的时候。

每次您在文件夹中留下一个文件时,这个中介都会运行,但是当它发生时启动的方法是"mediator"methods,其实现不做任何事情(返回false)。所以你应该实现中介方法

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

,它将显示您期望的消息

希望它能起作用!

应该在中介方法()中调用逻辑。并使返回值为true。如果将其设置为false,中介引擎将在中介流程中返回false,并在消息流中产生问题。您可以检查这个示例

最新更新