Ich kann nicht verstehen, warum meine Tests nicht funktionieren. Ich versuche abzufangen und überspringe das Senden an den Endpunkt, bei dem es sich um eine Bean-Referenz handelt und nichts passiert. Ich benutze Version 2.16.2.Apache Kamel. InterceptSendTo funktioniert nicht mit Bean Endpunkt
Test-camel.xml
<bean id="eb" class="com.rencap.emf.bpipe.EndpointBean"/>
<camel:camelContext xmlns="http://camel.apache.org/schema/spring">
<camel:endpoint id="requestEP" uri="direct:request"/>
<endpoint id="beanEP" uri="bean:eb?method=processMessage" />
<camel:route id="testRoute">
<camel:from ref="requestEP"/>
<camel:to ref="beanEP" />
</camel:route>
</camel:camelContext>
EndpointBean.java
package com.rencap.emf.bpipe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EndpointBean {
private static Logger LOG = LoggerFactory.getLogger(EndpointBean.class);
public void processMessage(String msg){
LOG.info("Processing message: {} ",msg);
}
}
Unit-Test:
@EndpointInject(ref="requestEP")
ProducerTemplate requestEP;
@EndpointInject(ref="beanEP")
ProducerTemplate beanEP;
@Autowired
ModelCamelContext camelContext;
@Test
public void test() throws Exception{
camelContext.getRouteDefinition("testRoute").adviceWith(camelContext , new AdviceWithRouteBuilder(){
@Override
public void configure() throws Exception {
interceptSendToEndpoint(beanEP.getDefaultEndpoint().getEndpointUri()).
to("mock:send").
skipSendToOriginalEndpoint();
}
});
TestUtils.waitingFor("Configuration applied", 2000);
MockEndpoint mockEP = camelContext.getEndpoint("mock:send",MockEndpoint.class);
mockEP.setExpectedCount(1);
requestEP.sendBody("Message");
mockEP.assertIsSatisfied();
TestUtils.waitingFor("All rows commited", 2000);
}
-Test immer versagt. Protokolle:
13:11:02.512 [main] INFO o.apache.camel.model.RouteDefinition - AdviceWith route after: Route(testRoute)[[From[ref:requestEP]] -> [InterceptSendToEndpoint[bean://eb?method=processMessage -> [To[mock:send]]], To[ref:beanEP]]]
13:11:02.537 [main] INFO o.a.camel.spring.SpringCamelContext - Route: testRoute started and consuming from: Endpoint[direct://request]
13:11:02.538 [main] INFO com.rencap.emf.bpipe.test.TestUtils - Wait 2000 ms. Configuration applied
13:11:04.554 [main] INFO com.rencap.emf.bpipe.EndpointBean - Processing message: Message
13:11:04.556 [main] INFO o.a.c.component.mock.MockEndpoint - Asserting: Endpoint[mock://send] is satisfied
Es bedeutet, dass bis zum Endpunkt zu senden ist nicht abgefangen werden und übersprungen. Vielleicht verstehe ich etwas nicht, aber ich konnte keine Einschränkung bei der Verwendung dieser Methode finden.
Zusätzlich habe ich das gleiche Problem für Endpunkt mit Protokoll festgestellt. Wenn ich beeEP on ersetzen:
<endpoint id="beanEP" uri="log:LOGMESSAGE" />
, dass ich das gleiche Ergebnis erhalte. Aber wenn ich es ersetzen auf
<endpoint id="beanEP" uri="seda:send" />
und neue Route hinzufügen:
<camel:route id="route2">
<camel:from ref="sendEP"/>
<camel:log message="msg received ${body}"/>
</camel:route>
, dass ich Ergebnis und Test erhalten erwartet wird successed werden.
Was mache ich falsch? Oder gibt es Einschränkungen bei dieser Methode?