0

春に次の XML DSL コンテキスト定義があります。

<beans>
    <camelContext>
        <route>
            <from uri="direct:foo"/>
            <split parallelProcessing="true">
                <simple>${body}</simple>
                <to uri="direct:bar"/>
            </split>
        </route>
    </camelContext>
</beans>

私のテストでは、次のdirect:barようにエンドポイントを織り込もうとしています:

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

    @Override
    public void configure() throws Exception {
        weaveByToString(".*direct:bar.*").replace().to("mock:bar");
    }
});

これは正常に機能します。しかし、ルートが開始されると、例外がスローされてorg.apache.camel.NoSuchBeanException: No bean could be found in the registry for: direct:bar.

なんで?

キャメルはスプリット内の織りをサポートしていないのでしょうか?

注:次の XML を使用すると、すべてが正常に機能します。

<beans>
    <camelContext>
        <route>
            <from uri="direct:dummy"/>
            <to uri="direct:bar"/>
        </route>

        <route>
            <from uri="direct:foo"/>
            <split parallelProcessing="true">
                <simple>${body}</simple>
                <to uri="direct:dummy"/>
            </split>
        </route>
    </camelContext>
</beans>
4

1 に答える 1

0

Camel 2.7 を使用して説明されているユース ケースでエラーを再現できませんでした。合格した私のテストは次のとおりです。

@Test
public void test() throws Exception {

    context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

        @Override
        public void configure() throws Exception {
            weaveByToString(".*direct:bar.*").replace().to("mock:bar");
        }
    });

    MockEndpoint mock = getMockEndpoint("mock:bar");
    mock.expectedMessageCount(1);

    template.sendBody("direct:foo", "this is a test");

    assertMockEndpointsSatisfied();
}

camel:runをスローせずにまた開始を使用してルートを開始しNoSuchBeanExceptionます。

于 2012-04-20T07:52:59.753 に答える