Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Camel - Can't access rest service

I'm running camel via spring and camel boot with embedded tomcat. I have a simple camel route that is configuring correctly and consuming that I can see in the logs, but when i try to access it, it is giving 404 with localhost:8080/hi.

My Route

 @Component
 public class ServiceRoute extends RouteBuilder {

 @Autowired
 private SampleBean sampleBean;

 @Override
 public void configure() throws Exception {
   from("rest:get:hi").to("bean:sampleBean");
 }
}

My Main class

@Configuration
@SpringBootApplication
@ComponentScan(basePackages = { "routes", "service" },
    excludeFilters = {@ComponentScan.Filter(value = Controller.class,     
    type = FilterType.ANNOTATION)})

public class Application  {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
}

Gradle dependencies

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'

compile 'org.apache.camel:camel-spring-boot-starter:2.17.0'

compile group: 'org.springframework.boot', name: 'spring-boot-starter-
web', version: '1.4.2.RELEASE'

compile group: 'org.apache.camel', name: 'camel-servlet', version:  
'2.18.1'
}

Logs

2016-12-12 12:37:39.860  INFO 24684 --- [           main] root.Application                         : Starting Application on ram.tscpt.local with PID 24684 (/Users/srikanth/emulya/build/classes/main started by srikanth in /Users/srikanth/emulya)
2016-12-12 12:37:39.865  INFO 24684 --- [           main] root.Application                         : No active profile set, falling back to default profiles: default
2016-12-12 12:37:39.979  INFO 24684 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4facf68f: startup date [Mon Dec 12 12:37:39 SAST 2016]; root of context hierarchy
2016-12-12 12:37:41.866  INFO 24684 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.apache.camel.spring.boot.CamelAutoConfiguration' of type [class org.apache.camel.spring.boot.CamelAutoConfiguration$$EnhancerBySpringCGLIB$$a11fb1e5] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2016-12-12 12:37:42.597  INFO 24684 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-12-12 12:37:42.617  INFO 24684 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-12-12 12:37:42.618  INFO 24684 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.5
2016-12-12 12:37:42.756  INFO 24684 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-12-12 12:37:42.756  INFO 24684 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2782 ms
2016-12-12 12:37:42.959  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2016-12-12 12:37:42.983  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-12-12 12:37:42.984  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-12-12 12:37:42.985  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-12-12 12:37:42.985  INFO 24684 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2016-12-12 12:37:43.525  INFO 24684 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4facf68f: startup date [Mon Dec 12 12:37:39 SAST 2016]; root of context hierarchy
2016-12-12 12:37:43.651  INFO 24684 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-12-12 12:37:43.653  INFO 24684 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-12-12 12:37:43.703  INFO 24684 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-12-12 12:37:43.707  INFO 24684 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-12-12 12:37:43.778  INFO 24684 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-12-12 12:37:44.557  INFO 24684 --- [           main] o.a.c.i.converter.DefaultTypeConverter   : Loaded 196 type converters
2016-12-12 12:37:44.890  INFO 24684 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-12-12 12:37:44.970  INFO 24684 --- [           main] o.a.camel.spring.boot.RoutesCollector    : Loading additional Camel XML routes from: classpath:camel/*.xml
2016-12-12 12:37:44.973  INFO 24684 --- [           main] o.a.camel.spring.boot.RoutesCollector    : Loading additional Camel XML rests from: classpath:camel-rest/*.xml
2016-12-12 12:37:44.974  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.18.1 (CamelContext: camel-1) is starting
2016-12-12 12:37:44.976  INFO 24684 --- [           main] o.a.c.m.ManagedManagementStrategy        : JMX is enabled
2016-12-12 12:37:45.548  INFO 24684 --- [           main] o.a.c.i.DefaultRuntimeEndpointRegistry   : Runtime endpoint registry is in extended mode gathering usage statistics of all incoming and outgoing endpoints (cache limit: 1000)
2016-12-12 12:37:45.871  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2016-12-12 12:37:46.023  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route1 started and consuming from: servlet:/hi?httpMethodRestrict=GET
2016-12-12 12:37:46.024  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Total 1 routes, of which 1 are started.
2016-12-12 12:37:46.026  INFO 24684 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.18.1 (CamelContext: camel-1) started in 1.050 seconds
2016-12-12 12:37:46.147  INFO 24684 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-12-12 12:37:46.157  INFO 24684 --- [           main] root.Application                         : Started Application in 6.985 seconds (JVM running for 7.475)
like image 731
Srikanth Malyala Avatar asked Dec 12 '16 10:12

Srikanth Malyala


People also ask

What is Camel rest?

The Rest DSL is a facade that builds Rest endpoints as consumers for Camel routes. The actual REST transport is leveraged by using Camel REST components such as Netty HTTP, Servlet, and others that has native REST integration.

What problem does Apache Camel solve?

Purpose of 'Apache Camel' is to route 'messages' from one 'system' to another one in the world. Apache camel uses different transport mechanisms for message routing. Apache Camel picks up messages using 'Camel based Component' of the 'from' system and drops them using the 'Camel based Component' of the 'to' system.

Is Apache Camel reactive?

The Camel module provides a reactive-streams component that allows users to define incoming and outgoing streams within Camel routes, and a direct client API that allows using Camel endpoints directly into any external reactive framework.


1 Answers

It's not working, because the Camel HTTP Servlet is not registered. CamelAutoConfiguration just starts the camel context.

You need to register the servlet yourself. The default name of the camel servlet is CamelServlet. Change your Application class:

@SpringBootApplication
@ComponentScan(basePackages = { "routes", "service" },
    excludeFilters = {@ComponentScan.Filter(value = Controller.class,     
    type = FilterType.ANNOTATION)})

public class Application  {

    public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
    }

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new CamelHttpTransportServlet(), "/service/*");
        registration.setName("CamelServlet");
        return registration;
    }
}

And then try to access http://localhost/service/hi

Btw, you don't need to add @Configuration to the class annotated with @SpringBootApplication.

like image 197
Strelok Avatar answered Oct 21 '22 19:10

Strelok