Apache Camel Iteration über Liste

Ich bin neu in Apache Camel und ich habe Probleme zu verstehen, wie, um eine einfache Implementierung integration Aufgabe:

  1. Einen REST service aufrufen einer Spring Bean über Apache Camel route
  2. Spring Bean gibt eine Sammlung von Klassen (ArrayList)

Muss ich Durchlaufen jedes Element in der Kollektion und konvertieren Sie es zu einer anderen Art durch die benutzerdefinierte Konverter.

Es scheint, dass ich verwenden soll, Split, ein Aggregator, aber wie kann ich die Einschränkung Aggregator zu konsumieren, alle Elemente aus der ursprünglichen Liste, nicht mehr, nicht weniger. Auch, wie kann ich konvertieren von einem Element auf ein anderes? Sollte ich eine Art Converter?

Kann jemand mir ein einfaches Beispiel?

UPDATE 1

Sorry, musste ich rückgängig machen, die Akzeptanz der zur Verfügung gestellten Beispiel, da ist es eigentlich nicht die Antwort auf meine Frage. Hier ist der use-case-Qualifikation:
Ich muss geteilt werden und verwandeln einen Rückgabewert der Methode von to("bean:someBean") Aufruf anstatt split und transformieren von input-Werte von einigen Endpunkt.

Also der Anwendungsfall ist

  1. Nennen Endpunkt; e.g GET-Anforderung an rest-service, in meinem Fall: from("endpoint")
  2. Aufruf einer bean und erhalten, es ist return Wert; wie List, to("bean:someBean"))
  3. Verwandeln zurückgegebenen Wert zu einem anderen List
  4. Kehren verwandelt zurück List Verbraucher

UPDATE 2

So, ich kann bestätigen, als mit end() Methode löst nicht mein problem.

Hier ist der code:

rest("some/service").get().produces("application/json").to("bean:someBean?method=getListOfObjects").route().split(body(), (oldExchange, newExchange) -> {
                List<ObjectToConvert> oldList = oldExchange.getIn(List.class);
                List<NewObject> convertedList = taskList.stream().map(ObjectToConvert::new).collect(Collectors.toList());
                newExchange.getOut().setBody(convertedList);

                return newExchange;
            }).end();

Unter Verwendung dieser Art der route erhalte ich die folgende Ausnahme auf dem application server:

19:30:21,126 ERROR [org.jboss.as.controller.management-operation] (XNIO-1 task-5) JBAS014613: Operation ("full-replace-deployment") failed - address: (undefined) - failure description: {"JBAS014671: Failed services" => {"jboss.undertow.deployment.default-server.default-host./CamundaLearningCamel" => "org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./CamundaLearningCamel: Failed to start service
    Caused by: java.lang.RuntimeException: org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException: Failed to create route route2 at: >>> Split[{body} -> []] <<< in route: Route(route2)[[From[rest:get:task/all?produces=application%2... because of Definition has no children on Split[{body} -> []]
    Caused by: org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException: Failed to create route route2 at: >>> Split[{body} -> []] <<< in route: Route(route2)[[From[rest:get:task/all?produces=application%2... because of Definition has no children on Split[{body} -> []]
    Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create route route2 at: >>> Split[{body} -> []] <<< in route: Route(route2)[[From[rest:get:task/all?produces=application%2... because of Definition has no children on Split[{body} -> []]
    Caused by: java.lang.IllegalArgumentException: Definition has no children on Split[{body} -> []]"}}
Schreibe einen Kommentar