我制作了一个简单打印"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,并在消息流中产生问题。您可以检查这个示例