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>

ファイル (*.txt) をソース フォルダーに入れるたびに、シーケンスが呼び出されることを期待しています。しかし問題は、シーケンスが 1 回だけ呼び出されることです (wso2 esb の起動時)。ファイルをソース フォルダに置くたびにシーケンスが呼び出されるようにするにはどうすればよいですか?

ありがとう、

4

2 に答える 2

1

mediate method() 内でロジックを呼び出す必要があります。そして戻り値をtrueにします。これを false にすると、メディエーション エンジンがメディエーション プロセスで false を返し、メッセージ フローで問題が発生します。このサンプルを確認できます

于 2013-06-20T14:52:38.777 に答える
1

期待どおりに機能していると思いますが、カスタムメディエーターがどのように機能するかを誤解していると思います。表示されるメッセージは、init メソッドによって表示されるメッセージです。これは、メディターが作成されたときです。

このメディエーターは、フォルダーにファイルを残すたびに実行されますが、それが発生したときに起動されるメソッドは「メディエーター」メソッドであり、実装は何もしません (rerun false)。したがって、メディエーターメソッドを次のように実装する必要があります

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

期待どおりにメッセージが表示されます。

それがうまくいくことを願っています!

于 2013-06-20T14:30:22.440 に答える