这是我的简单路线:
@Override
public void configure() {
onException(Exception.class)
.handled(true)
.process(exchange -> {
Exception exception = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
log.error(logFormat.error(exchange, exception, exception.getMessage()));
exchange.getIn().setBody(exception.getMessage());
exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, HttpStatus.SC_INTERNAL_SERVER_ERROR);
});
onException(HttpOperationFailedException.class)
.handled(true)
.to("direct:handleHttpOperationFailed");
from("direct:myRoute")
.routeId("myRoute")
.log("Route start: myRoute")
.id("startStep")
.process(
exchange -> log.info("Doing some processing")
)
.id("processingStep")
.end();
}
现在我要编写一些测试:
这就是我所做的...
我的测试注释:
@RunWith(CamelSpringBootRunner.class)
@UseAdviceWith
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class StarlingFpsInboundWebhookIT {
...
}
我的两个测试用例:
@Test
public void exceptionScenario() throws Exception {
// Given
context.getRouteDefinition("myRoute").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() {
weaveById("processingStep").after()
.process(exchange -> {
throw ExceptionFixtures.createSimpleException();
})
.id("exceptionThrowStep");
}
});
context.start();
String requestBody = ResourcesHelper.read(this.getClass(), "/data/input/request.json");
// When
template.send("direct:myRoute", camelExchange -> {...});
}
@Test
public void successScenario() throws Exception {
// Given
context.getRouteDefinition("myRoute").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() {
weaveById("exceptionThrowStep").remove();
}
});
context.start();
String requestBody = ResourcesHelper.read(this.getClass(), "/data/input/request.json");
// When
template.send("direct:myRoute", camelExchange -> {...});
}
并且当我运行那些测试时(第一个异常然后是成功的场景),我在第二个测试中出现了异常:
org.apache.camel.FailedToCreateRouteException: Failed to create route myRoute at: >>> pipeline -> [[]] <<< in route: Route(myRoute)[[From[direct:myRoute]... because of Definition has no children on pipeline -> [[]]
为什么会发生此异常?我读过很多文章,但在这种情况下没有发现任何宝贵的东西:(有趣的是-在adviceWith的第二次测试中,我使用replace()而不是remove()时,一切正常...
我的问题是:
这是我的简单路线:@Override public void configure(){onException(Exception.class).handled(true).process(exchange-> {Exception exception = exchange.getProperty(Exchange ....
我首先从您的两个问题开始: