2

VM エンドポイントを介して別のフローを呼び出す 1 つのフローがあります。呼び出しは例外で失敗しますNoReceiverForEndpointException。ログのメッセージは次のとおりです。

There is no receiver registered on connector "connector.VM.mule.default" for endpointUri vm://inner

誰かが理由を知っていますか?これは Mule 3.3.0 エンタープライズ エディションです。

ありがとう。

構成ファイル:

<mule ...>
    <vm:endpoint name="inner" path="inner" />
    <flow name="inner.flow">
        <inbound-endpoint ref="inner" exchange-pattern="request-response" />
        <logger level="INFO" message="in inner flow" />
    </flow>

    <vm:endpoint name="outer" path="outer" />
    <flow name="outer.flow">
        <inbound-endpoint ref="outer" exchange-pattern="one-way" />
        <logger level="INFO" message="in outer flow" />
        <outbound-endpoint ref="inner" exchange-pattern="request-response" />
    </flow>
</mule>

それを実行するためのテストケース:

import org.junit.Test;
import org.mule.api.MuleException;
import org.mule.module.client.MuleClient;
import org.mule.tck.junit4.FunctionalTestCase;

public class VMEndpointTest extends FunctionalTestCase {

    @Test
    public void innerIsCalled() throws MuleException {
        final MuleClient client = new MuleClient(muleContext);
        client.sendNoReceive("outer", new Object(), null);
    }

    @Override
    protected String getConfigResources() {
        return "test.xml";
    }

}
4

2 に答える 2

1

ああ、私は自分でこれを考え出した:

  1. 外部エンドポイントはであるため、メッセージを送信するためone-wayに使用する必要がありました。dispatch
  2. one-wayMule がフロー内のメッセージを処理するのを単体テストが待機するには、何らかのメカニズムが必要です。そのためだけに vm エンドポイントを導入receiveし、Java コードで呼び出しを行いました。

構成ファイル:

<mule ...>
    <vm:endpoint name="outer" path="outer" />
    <flow name="outer.flow">
        <inbound-endpoint ref="outer" exchange-pattern="one-way" />
        <logger level="INFO" message="in outer flow" />
        <outbound-endpoint ref="inner" exchange-pattern="request-response" />
    </flow>

    <vm:endpoint name="inner" path="inner" />
    <vm:endpoint name="inner.completed" path="inner.completed" />
    <flow name="inner.flow">
        <inbound-endpoint ref="inner" exchange-pattern="request-response" />
        <logger level="INFO" message="in inner flow" />
        <outbound-endpoint ref="inner.ftc" exchange-pattern="request-response" />
        <outbound-endpoint ref="inner.completed" exchange-pattern="one-way" />
    </flow>

    <vm:endpoint name="inner.ftc" path="inner.ftc" />
    <simple-service name="innerFtc" endpoint-ref="inner.ftc">
        <test:component />
    </simple-service>
</mule>

テストケース:

package foo;

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.mule.module.client.MuleClient;
import org.mule.tck.functional.FunctionalTestComponent;
import org.mule.tck.junit4.FunctionalTestCase;

public class VMEndpointTest extends FunctionalTestCase {

    @Test
    public void innerIsCalled() throws Exception {
        final FunctionalTestComponent ftc = getFunctionalTestComponent("innerFtc");
        final Object object = new Object();
        final MuleClient client = new MuleClient(muleContext);

        client.dispatch("outer", object, null);
        client.request("inner.completed", RECEIVE_TIMEOUT);

        assertEquals(object, ftc.getLastReceivedMessage());
    }

    @Override
    protected String getConfigResources() {
        return "test.xml";
    }

}
于 2012-09-17T16:11:43.323 に答える