Re: Help with using application.properties entries with Camel and Spring Boot

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Help with using application.properties entries with Camel and Spring Boot

Larry Shields
Looking at the stack trace it looks like the problem is with what it being
returned from your call to the Web Service.   Reading from the properties
file, I normally like to use a configuration class in Spring to hold these
values.  Then just Autowire it into the Route Builder class.  Here's an
example:

https://github.com/runstache/java-came-metrics

The AppSettings Class is populated with the values in the
application.properties file.  Also going this route, you can swap in
different properties files based on a spring profile or inject the class
for things like unit testing different routes and processors.  Once you
have them in a config class, it's really just string building then in the
Camel DSL for the route.

Note: The application.properties file in this project is utilizing
environment variables for it's values.

On Mon, Aug 5, 2019 at 3:44 AM Viki Keaton <[hidden email]> wrote:

> Hello-
> I'm new to Camel and excited about it's use.  However, I find myself very
> frustrated with what seems to be the simplest of things.  I have several
> questions, but will try and keep them in separate posts.
>
> I am using Eclipse, Camel 2.24.0, Spring Boot 2.2.0, Java 1.8, and I can
> not use any xml.
>
> I would like to dynamically build my URIs based on properties from an
> application.properties file that is on the classpath, as well as use
> exchange header parameters.
> I thought I could use toD() to create dynamic URIs?  This seems to be
> blank.  What am I doing wrong?  Also, please note that I tried to print my
> application.properties value for the key "data.trans.vm", and I get nothing.
>
> My goal is to be able to use the applications.properties file as well as
> header parameters.  Thanks in advance for your help.
>
>
> My ~/src/main/resources/applications.properties file:
> data.trans.greeting=Hello Viki
>
> @Component
> public class DataTransRouteBuilder extends RouteBuilder {
> @Override
>                public void configure() throws Exception {
>
> from("jetty:http://localhost:8081/foobar").tracing()
>                               .log("data mart id is: ${header.dataMartId}")
>                               .to("direct:getDataMart");
>
>
>                from("direct:getDataMart").tracing()
>                    .log("at direct:getDataMart")
>                    .log("properties: DATA_TRANS_VM is
> properties:{{data.trans.greeting}}")
>                    .setBody().constant(null)
>                    .setHeader(Exchange.HTTP_METHOD, simple("GET"))
>                    .setHeader("Content-Type", constant("application/json"))
>                    .setHeader("Accept", constant("application/json"))
>                    .setHeader("Accept-Encoding", constant("identity"))
>                    .setHeader("Authorization", constant(BASIC_AUTH))
>                    .log("call data mart url for id=${header.dataMartId}")
>                    .toD("http://<MY REMOTE REST
> SERIVE>:<PORT>/${header.dataMartId}/build?bridgeEndpoint=true")
>                    .choice()
>
> .when().simple("${header.CamelHttpResponseCode} != 200")
>                .log("Failure to call: " + DATA_TRANS_DATAMART_URL)
>                .to("direct:ERROR")
>          .end()
>
>                    .unmarshal().json(JsonLibrary.Jackson, JobInfo.class)
>                    .bean(dataTransJobInfoProcessor, "process")
> ...
> From my console:
> ...
> 2019-08-03 23:39:32.195  INFO 7612 --- [           main]
> o.a.camel.spring.SpringCamelContext      : Apache Camel 2.24.0
> (CamelContext: camel-1) started in 0.918 seconds
> 2019-08-03 23:39:32.254  INFO 7612 --- [           main]
> o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080
> (http) with context path ''
> 2019-08-03 23:39:32.258  INFO 7612 --- [           main]
> a.r.l.a.ReckonLineageAdaptersApplication : Started
> ReckonLineageAdaptersApplication in 16.714 seconds (JVM running for 17.413)
> 2019-08-03 23:39:41.859  INFO 7612 --- [tp1955991197-25] route1
>                        : data mart id is: 12345
> 2019-08-03 23:39:41.860  INFO 7612 --- [tp1955991197-25] route2
>                        : at direct:getDataMart
> 2019-08-03 23:39:41.860  INFO 7612 --- [tp1955991197-25] route2
>                        : properties: DATA_TRANS_VM is
> properties:{{data.trans.vm}}
> 2019-08-03 23:39:41.861  INFO 7612 --- [tp1955991197-25] route2
>                        : call data mart url for id=12345
> 2019-08-03 23:39:42.197 ERROR 7612 --- [tp1955991197-25]
> o.a.camel.processor.DefaultErrorHandler  : Failed delivery for (MessageId:
> ID-vkeat01116-1564893569848-0-3 on ExchangeId:
> ID-vkeat01116-1564893569848-0-1). Exhausted after delivery attempt: 1
> caught: com.fasterxml.jackson.databind.exc.MismatchedInputException: No
> content to map due to end-of-input
> at [Source:
> (org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream);
> line: 1, column: 0]
> ...
>
> Message History
>
> ---------------------------------------------------------------------------------------------------------------------------------------
> RouteId              ProcessorId          Processor
>                                                 Elapsed (ms)
> [route1            ] [route1            ] [jetty:
> http://localhost:8081/foobar                                            ]
> [       338]
> [route1            ] [log1              ] [log
>                                                ] [         2]
> [route1            ] [to1               ] [direct:getDataMart
>                                               ] [         0]
> [route2            ] [log2              ] [log
>                                                ] [         0]
> [route2            ] [log3              ] [log
>                                                ] [         0]
> [route2            ] [setBody1          ] [setBody[{null}]
>                                                ] [         0]
> [route2            ] [setHeader1        ] [setHeader[CamelHttpMethod]
>                                               ] [         1]
> [route2            ] [setHeader2        ] [setHeader[Content-Type]
>                                                ] [         0]
> [route2            ] [setHeader3        ] [setHeader[Accept]
>                                                ] [         0]
> [route2            ] [setHeader4        ] [setHeader[Accept-Encoding]
>                                               ] [         0]
> [route2            ] [setHeader5        ] [setHeader[Authorization]
>                                               ] [         0]
> [route2            ] [log4              ] [log
>                                                ] [         0]
> [route2            ] [toD1              ] [
>                                               ] [       309]
> [route2            ] [choice1           ]
> [when[simple{${header.CamelHttpResponseCode} != 200}]choice[]
>     ] [         8]
> [route2            ] [unmarshal1        ]
> [unmarshal[org.apache.camel.model.dataformat.JsonDataFormat@f6e1ef6]
>      ] [        13]
>
> Stacktrace
>
> ---------------------------------------------------------------------------------------------------------------------------------------
>
> com.fasterxml.jackson.databind.exc.MismatchedInputException: No content to
> map due to end-of-input
> at [Source:
> (org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream);
> line: 1, column: 0]
>                at
> com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
> ~[jackson-databind-2.9.9.jar:2.9.9]
>                at
> com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4145)
> ~[jackson-databind-2.9.9.jar:2.9.9]
>                at
> com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4000)
> ~[jackson-databind-2.9.9.jar:2.9.9]
>                at
> com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3070)
> ~[jackson-databind-2.9.9.jar:2.9.9]
>                at
> org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:194)
> ~[camel-jackson-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:69)
> ~[camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:76)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.Pipeline.process(Pipeline.java:138)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
> [camel-core-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:220)
> [camel-jetty-common-2.24.0.jar:2.24.0]
>                at
> org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:79)
> [camel-http-common-2.24.0.jar:2.24.0]
>                at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
> [tomcat-embed-core-9.0.21.jar:9.0.21]
>                at
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:876)
> [jetty-servlet-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1623)
> [jetty-servlet-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.servlets.MultiPartFilter.doFilter(MultiPartFilter.java:150)
> [jetty-servlets-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.apache.camel.component.jetty.CamelFilterWrapper.doFilter(CamelFilterWrapper.java:43)
> [camel-jetty-common-2.24.0.jar:2.24.0]
>                at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1610)
> [jetty-servlet-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)
> [jetty-servlet-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1347)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
> [jetty-servlet-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1249)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at org.eclipse.jetty.server.Server.handle(Server.java:505)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)
> [jetty-server-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
> [jetty-io-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
> [jetty-io-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
> [jetty-io-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:781)
> [jetty-util-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:917)
> [jetty-util-9.4.19.v20190610.jar:9.4.19.v20190610]
>                at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]
>
>
> ***************************************************************************
> The information contained in this communication is confidential, is
> intended only for the use of the recipient named above, and may be legally
> privileged.
>
> If the reader of this message is not the intended recipient, you are
> hereby notified that any dissemination, distribution or copying of this
> communication is strictly prohibited.
>
> If you have received this communication in error, please resend this
> communication to the sender and delete the original message or any copy
> of it from your computer system.
>
> Thank You.
>
> ****************************************************************************
>