Apache camel camel mock-MockEndpoint.whenAnyExchangeReceived进程方法未执行

Apache camel camel mock-MockEndpoint.whenAnyExchangeReceived进程方法未执行,apache-camel,Apache Camel,我有下面的示例代码,为什么MockEndpoint.whenAnyExchangeReceived中的流程方法没有执行 我希望响应是“来自模拟远程http调用的预期主体”,但实际响应是在请求中传递的(“驼峰”) 我在测试中添加了一些断点,似乎自动创建的模拟端点是mock://http:abc/bcd,而不是模拟:http://abc/bcd 要找到发生这种情况的原因,可以查看方法org.apache.camel.impl.InterceptSendToMockEndpointStrategy#r

我有下面的示例代码,为什么MockEndpoint.whenAnyExchangeReceived中的流程方法没有执行

我希望响应是“来自模拟远程http调用的预期主体”,但实际响应是在请求中传递的(“驼峰”)


我在测试中添加了一些断点,似乎自动创建的模拟端点是
mock://http:abc/bcd
,而不是
模拟:http://abc/bcd

要找到发生这种情况的原因,可以查看方法
org.apache.camel.impl.InterceptSendToMockEndpointStrategy#registerEndpoint
,它是模拟端点自动注册的一部分。从http URI中删除了
/
。然后转到
org.apache.camel.util.URISupport#normalizeUri
方法,其中为
mock
uri前缀添加了
/

InterceptSendToMockEndpointStrategy
的实现中也有很好的注释,但我在文档中找不到它

//创建我们将用作拦截器的模拟端点
//替换://from scheme,以便轻松查找模拟端点,而不必在uri中使用double://

当您将其更改为
getMockEndpoint(“mock://http:abc/bcd”
,测试通过


避免这些问题的最佳方法是将
false
作为
getMockEndpoint()
方法的第二个参数传递(如果您希望已经创建了端点)。如果模拟终结点不存在,这将引发异常。否则将根据需要创建新的模拟端点。

谢谢您,贝德拉!在我更新了你所说的话之后,它就起作用了。@ ChinLiang,如果答案帮助你,请考虑接受它作为正确的答案并进行投票。
public class CamelMockRemoteHttpCallTest extends CamelTestSupport {

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:start")
                    .to("http://abc/bcd")
                    ;
            }
        };
    }

    @Override
    public String isMockEndpointsAndSkip() {
        return "http://abc/bcd";
    }

    @Test
    public void testSimulateErrorUsingMock() throws Exception {
        MockEndpoint http = getMockEndpoint("mock:http://abc/bcd");

        http.whenAnyExchangeReceived(new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.getOut().setBody("Expected Body from mock remote http call");   //why this line doesn't execute
            }
        });

        String response = template.requestBody("direct:start", "Camel rocks", String.class);

        assertEquals("Expected Body from mock remote http call", response);  //failed, the actual response is "Camel rocks"
    }
}