Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

método setProperty com Json

Boa Tarde!

Preciso guardar dados da rota usando Json .

Na aula temos o exemplo abaixo para guardar os dados quando a informação vem de um xml.

setProperty("pedidoId", xpath("/pedido/id/text()"))

Não localizei um substituto equivalente quando uso Json.

3 respostas

Não manjo de camel, mas me arrisquei olhando aqui na documentação e acho que isso aqui pode ajudar => http://camel.apache.org/jsonpath.html

Por debaixo dos panos ele usa esse projeto aqui => https://github.com/jayway/JsonPath

Eu utilizo o jsonpath para realizar o split e para filtrar a informação, porém não consigo utilizá-lo para capturar um valor.

from("direct:rest")
            .routeId("route-rest")
            .convertBodyTo(String.class)
            .split().jsonpath("$.*[?(@.id > 71)]")
//gostaria de obter o valor na linha abaixo.             
//  .setProperty("moeda",  jsonpath("$.[1].moeda"))
              .log("1 -  ${body}")              
              .marshal().json(JsonLibrary.Gson)
              .log("2 -  ${body}")        
              .to("http4://localhost:9200/rf/valores");
solução!

Boa Tarde!

Consegui uma forma de armazenar o valor no property usando json.

Segue exemplo abaixo:

        from("direct:rest").routeId("route-rest")
        .convertBodyTo(String.class).split().jsonpath("$.*[?(@.id > 1)]")
                .marshal().json(JsonLibrary.Gson)
                .setProperty("id").jsonpath("$.id")
                .setProperty("moeda").jsonpath("$.moeda")
                .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.PUT))
                .setHeader(Exchange.HTTP_URI, simple("http4://localhost:9200/rf/valores/${property.id}_${property.moeda}"))
                .to("http4://localhost:9200");

Com xml:

setProperty("pedidoId", xpath("/pedido/id/text()"))

Com Json:

setProperty("pedidoId").jsonpath("$.id")