in rest-cxf-opentelemetry/rest-cxf-otel-random/src/main/java/org/apache/camel/example/springboot/cxf/otel/CamelRouter.java [40:125]
public void configure() throws Exception {
//very raw way, just to handle the validation responses
onException(BeanValidationException.class)
.handled(true)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(Response.Status.BAD_REQUEST.getStatusCode()))
.setBody(simple("${exchangeProperty.CamelExceptionCaught.getMessage()}"));
// @formatter:off
from("cxfrs:/api?" +
"resourceClasses=org.apache.camel.example.springboot.cxf.otel.RandomService" +
"&bindingStyle=SimpleConsumer" +
"&providers=jaxrsProvider,openTelemetryProvider" +
"&loggingFeatureEnabled=true")
.to("log:camel-cxf-log?showAll=true")
.setHeader(Exchange.BEAN_METHOD_NAME, simple("${header.operationName}"))
.bean(RandomServiceImpl.class);
from("direct:play").routeId("play")
.loop(header("attempts"))
.process(exchange -> exchange.getIn().getHeaders().clear())
.setHeader(CxfConstants.HTTP_METHOD, constant("GET"))
.toD("cxfrs:{{service.random.url}}/services/api/generate")
.process(exchange -> exchange.getIn().getHeaders().clear())
.setHeader(CxfConstants.HTTP_METHOD, constant("POST"))
.setHeader(CxfConstants.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
.toD("cxfrs:{{service.even.url}}/services/api/check")
.process(exchange -> exchange.getIn().getHeaders().clear())
.setHeader(CxfConstants.HTTP_METHOD, constant("POST"))
.setHeader(CxfConstants.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
.toD("cxfrs:{{service.odd.url}}/services/api/check")
.end()
.setBody(constant(null));
from("direct:random").routeId("generate-random")
.loadBalance().random()
.to("direct:generate-even")
.to("direct:generate-odd")
.end()
.convertBodyTo(RandomNumber.class);
from("direct:generate-even")
.routeId("generate-even")
.process(exchange -> {
int num = random();
while (num % 2 != 0) {
num = random();
}
exchange.getIn().setBody(num);
});
from("direct:generate-odd").routeId("generate-odd")
.process(exchange -> {
int num = random();
while (num % 2 == 0) {
num = random();
}
exchange.getIn().setBody(num);
});
from("direct:save-obj").routeId("save-obj")
.setHeader(MinioConstants.OBJECT_NAME, header("objectName"))
.marshal().json(JsonLibrary.Jackson)
.toD("minio://{{bucket.name}}");
from("direct:load-results").routeId("load-results")
.setVariable("results", () -> new Results())
.toD("minio://{{bucket.name}}?operation=listObjects")
.split(body())
.process(exchange -> {
try {
exchange.getIn().setHeader(MinioConstants.OBJECT_NAME
, ((Contents) exchange.getIn().getBody(Result.class).get()).objectName());
} catch (Exception e) {
throw new RuntimeException(e);
}
})
.toD("minio://{{bucket.name}}?operation=getObject")
.unmarshal().json(JsonLibrary.Jackson, RandomNumber.class)
.process(exchange -> exchange.getVariable("results", Results.class)
.addNumber(exchange.getIn().getBody(RandomNumber.class)))
.end()
.setBody(variable("results"));
// @formatter:on
}