0

我试图为我的 mule 配置开发一个功能测试用例。这是代码:

protected String getConfigResources() {
        // TODO Auto-generated method stub
        return "src/test/resources/employee-get-functionalTestCase-config.xml";
    }

    @Test
    public void testMessage() throws Exception {
        MuleClient client = muleContext.getClient();
        client.dispatch("vm://in", "70009", null);

        MuleMessage result = client.request("vm://out", 60000);
        Assert.assertNotNull("Response payload was null", result);
        Assert.assertNull(result.getExceptionPayload());
        Assert.assertFalse(result.getPayload() instanceof NullPayload);

& 这里是我的 XML 文件的上下文:

<spring:beans>
        <context:property-placeholder location="classpath:mule-app.properties"/>
    </spring:beans>
    <flow name="testFlow">
        <vm:inbound-endpoint path="in"/>
        <logger message="in functional-test-config.xml (v4)" level="INFO" doc:name="Logger"/>
        <set-payload value="70010" doc:name="Use fixed employeeId 70010"/>
        <vm:outbound-endpoint exchange-pattern="request-response" path="employee-profile-get" doc:name="VM"/>
        <logger message="after employee-profile-get; payload: #[payload]" level="INFO" doc:name="Logger"/>

        <vm:outbound-endpoint path="out"/>
    </flow>

但是,当我执行此代码时,出现以下错误:

org.mule.api.transport.NoReceiverForEndpointException:endpointUri vm://employee-profile-get 的连接器“connector.VM.mule.default”上没有注册接收器

我在哪里注册 vm 端点?

4

1 回答 1

1

每个 exchange-pattern="request-response" vm endpoint 都必须有一个入站端点。

当应用程序在您的 mule 工作室中运行时,您可能不会收到任何错误(在编译时),但是当消息通过流程时,您将收到上述类型的错误。

这是因为 VM 是一个内存队列,一旦你放了一条消息,就应该有一个接收者来选择消息,因此当不存在时,这个错误就会弹出,它只适用于 exchange-pattern="request-response" 因为您放置消息的流(带有请求响应的出站端点)将等待来自 vm 端点 "employee-profile-get" 的响应。

要描述相同的错误,请将 替换为 localhost http 端点并尝试调用 http 端点。

为避免这种情况,请使用 path="employee-profile-get" 创建另一个入站端点作为 vm 的流,并使用 set payload component 返回一个字符串。然后您的测试用例就可以工作了。

问候, 纳文·拉吉

于 2013-10-11T08:38:28.590 回答