Конечная точка верблюда макет для pollEnrich - PullRequest
0 голосов
/ 20 февраля 2020

Я пытался смоделировать конечную точку для pollEnrich , но безуспешно. Насмешка с советами с отлично работает для .to("") и .enrich(""), но для pollEnrich я столкнулся с ошибкой: org. apache .http.conn.HttpHostConnectException: подключение к локальному хосту: 8983 Я не могу понять, почему adviceWith не подходит к pollEnrich Это код для насмешки:

public class PollEnricherRefTest extends CamelTestSupport {

    public class SampleMockRoute extends RouteBuilder {

        public void configure() throws Exception {
            System.out.println("configure");
            from("direct:sampleInput")
                    .log("Received Message is ${body} and Headers are ${headers}")
                    //.to("http4://localhost:8983/test")
                    .pollEnrich("http4://localhost:8983/test", (exchange1, exchange2) -> {
                        return exchange1;
                    })
                    .log("after enrich ${body} ")
                    .to("mock:output");
        }
    }

    @Override
    public boolean isUseAdviceWith() {
        return true;
    }

    @BeforeEach
    public void beforeAll() throws Exception {
        AdviceWithRouteBuilder mockHttp4 = new AdviceWithRouteBuilder() {
            @Override
            public void configure() throws Exception {
                interceptSendToEndpoint("http4://localhost:8983/test")
                        .log("call MOCK HTTP").skipSendToOriginalEndpoint();

            }
        };
        context = new DefaultCamelContext();
        context.addRoutes(new SampleMockRoute());
        context.getRouteDefinitions().get(0).adviceWith(context, mockHttp4);
        template = context.createProducerTemplate();
    }

    @Test
    public void sampleMockTest() throws InterruptedException {
        try {
            context.start();
            String expected = "Hello";
            MockEndpoint mock = getMockEndpoint("mock:output");
            mock.expectedBodiesReceived(expected);
            String input = "Hello";
            template.sendBody("direct:sampleInput", input);
            mock.assertIsSatisfied();
            context.stop();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете попробовать использовать weavyByType в configure (). Единственная проблема состоит в том, что он собирается заменить все шаблоны pollEnrich на приведенный ниже макет URL в этом маршруте. Это должно служить вашей цели, если у вас есть только один pollEnrich на вашем маршруте.

weaveByType(PollEnrichDefinition.class).replace().to("mock:mock-url");

Вы также можете попробовать установить идентификатор для этого конкретного pollEnrich, как показано ниже в вашем маршруте.

.pollEnrich("http4://localhost:8983/test", (exchange1, exchange2) -> {
                        return exchange1;
                    }).id("myPollEnrichId")

Как только это будет сделано, вы можете использовать weavyById, чтобы смоделировать этот c pollEnrich.

weaveById("myPollEnrichId").replace().to("mock:mock-url");

...