0

我制作了一个自定义调解器,只需打印“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 启动时)。每次将文件放入源文件夹时,如何调用我的序列?

谢谢,

4

2 回答 2

1

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

每次您将文件留在文件夹中时,此中介器都会运行,但是当它发生时启动的方法是“中介器”方法,该实现什么都不做(返回 false)。所以你应该将中介方法实现为

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

它将按您的预期显示消息。

希望它有效!

于 2013-06-20T14:30:22.440 回答
1

您应该在中介方法()中调用您的逻辑。并将返回值设为真。如果您将其设为 false,则中介引擎将在中介过程中返回 false,并在消息流中产生问题。你可以检查这个样本

于 2013-06-20T14:52:38.777 回答