Error creating recreation service using apache camel

Since I prety many new things for the Apache camel and especially Rest DSL, I thought about trying the Rest DSL sample.

So, I created camel-config.xml as:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <!-- use camel-metrics route policy to gather metrics for all routes --> <!-- bean id="metricsRoutePolicyFactory" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory"/--> <!-- a rest service which uses binding to/from pojos --> <bean id="userRoutes" class="org.apache.camel.example.rest.UserRouteBuilder"/> <!-- a bean for user services --> <bean id="userService" class="org.apache.camel.example.rest.UserService"/> <camelContext id="myCamel" xmlns="http://camel.apache.org/schema/spring"> <routeBuilder ref="userRoutes"/> </camelContext> </beans> 

and my route class:

 package org.apache.camel.example.rest; import org.apache.camel.builder.RouteBuilder; /** * Define REST services using the Camel REST DSL */ public class UserRouteBuilder extends RouteBuilder { public void configure() throws Exception { rest("/say").get("/hello").to("direct:hello").get("/bye") .consumes("application/json").to("direct:bye").post("/bye") .to("mock:update"); from("direct:hello").transform().constant("Hello World"); from("direct:bye").transform().constant("Bye World"); } } 

and my web.xml:

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>My Camel Rest Application</display-name> <!-- location of Camel Spring xml files --> <context-param> <param-name>contextConfigLocation</param-name> <!-- to use Java DSL --> <param-value>classpath:camel-config.xml</param-value> <!-- to use XML DSL, then enable me, and disable Java DSL above <param-value>classpath:camel-config-xml.xml</param-value> --> </context-param> <!-- the listener that kick-starts Spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- to setup Camel Servlet --> <servlet> <display-name>Camel Http Transport Servlet</display-name> <servlet-name>CamelServlet</servlet-name> <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- START SNIPPET: e1 --> <!-- to setup Camel Swagger api servlet --> <servlet> <servlet-name>ApiDeclarationServlet</servlet-name> <servlet-class>org.apache.camel.component.swagger.DefaultCamelSwaggerServlet</servlet-class> <init-param> <!-- we specify the base.path using relative notation, that means the actual path will be calculated at runtime as http://server:port/contextpath/rest --> <param-name>base.path</param-name> <param-value>rest</param-value> </init-param> <init-param> <!-- we specify the api.path using relative notation, that means the actual path will be calculated at runtime as http://server:port/contextpath/api-docs --> <param-name>api.path</param-name> <param-value>api-docs</param-value> </init-param> <init-param> <param-name>api.version</param-name> <param-value>1.2.3</param-value> </init-param> <init-param> <param-name>api.title</param-name> <param-value>User Services</param-value> </init-param> <init-param> <param-name>api.description</param-name> <param-value>Camel Rest Example with Swagger that provides an User REST service</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!-- swagger api declaration --> <servlet-mapping> <servlet-name>ApiDeclarationServlet</servlet-name> <url-pattern>/api-docs/*</url-pattern> </servlet-mapping> <!-- END SNIPPET: e1 --> <!-- define that url path for the Camel Servlet to use --> <servlet-mapping> <servlet-name>CamelServlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> <!-- START SNIPPET: e2 --> <!-- enable CORS filter so people can use swagger ui to browse and test the apis --> <filter> <filter-name>RestSwaggerCorsFilter</filter-name> <filter-class>org.apache.camel.component.swagger.RestSwaggerCorsFilter</filter-class> </filter> <filter-mapping> <filter-name>RestSwaggerCorsFilter</filter-name> <url-pattern>/api-docs/*</url-pattern> <url-pattern>/rest/*</url-pattern> </filter-mapping> <!-- END SNIPPET: e2 --> <welcome-file-list> <welcome-file>home.html</welcome-file> </welcome-file-list> </web-app> 

Now I created the war file of my restProject, and I deployed it to tomcat. Provided all the necessary banks in the lib tomcat folder. I am using camel 2.14.

Now, when I start my tomcat, during startup I get an error like:

 SEVERE: Context initialization failed org.apache.camel.RuntimeCamelException: java.lang.IllegalStateException: Cannot find RestConsumerFactory in Registry or as a Component to use at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1364) at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:122) at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:327) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMult icaster.java:96) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:3 34) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java: 948) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389 ) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1100) at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1618) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.IllegalStateException: Cannot find RestConsumerFactory in Registry or as a Component to use at org.apache.camel.component.rest.RestEndpoint.createConsumer(RestEndpoint.java:238) at org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:65) at org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:80) at org.apache.camel.impl.RouteService.warmUp(RouteService.java:134) at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:2379) at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:2309) at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:2091) at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1951) at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1777) at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1745) at org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:254) at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:120) ... 22 more 

I have been trying to figure out the last two days why I am getting this error. Really looking forward to your decisions. Thanks in advance.

+5
source share
1 answer

You need additional configuration for the rest of the DSL. 4, as described in http://camel.apache.org/rest-dsl.html , support DSL support. Take a look at the [Components Supporting Rest DSL] section. To configure, take a look at [Rest DSL Setup]

In fact, you need 2 more additions.

1) In your route builder, the rest of the configuration. For the servlet component, which may be restConfiguration().component("servlet") → there are more options.

Find the complete configuration in example

2) Add the dependency to pom.xml.

 <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-servlet</artifactId> </dependency> 

For configuration with sparklight see code here

+9
source

Source: https://habr.com/ru/post/1211682/


All Articles