I am trying to use camel (2.15.2) within a spring-boot application to handle incoming web service calls.
I created an initial working spring boot project (no camel) following the guidelines here http://spring.io/guides/gs/producing-web-service/ I then attempted to integrate the Camel: Spring Web Services component as a Consumer to handle incoming web service requests following guidelines in the 'Exposing Web Services' section here http://camel.apache.org/spring-web-services.html WebServiceConfig.java import org.apache.camel.component.spring.ws.bean.CamelEndpointMapping; @EnableWs @Configuration public class WebServiceConfig extends WsConfigurerAdapter { @Bean public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) { MessageDispatcherServlet servlet = new MessageDispatcherServlet(); servlet.setApplicationContext(applicationContext); servlet.setTransformWsdlLocations(true); return new ServletRegistrationBean(servlet, "/ws/*"); } // default wsdl stuff here... *// exposing the endpoint mapping bean here rather than in spring-ws-servlet.xml (seems to work)* * @Bean public CamelEndpointMapping endpointMapping() {* * return new CamelEndpointMapping();* * }* } ClaimRouter.java import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.dataformat.JaxbDataFormat; import org.springframework.stereotype.Component; @Component public class ClaimRouter extends RouteBuilder { @Override public void configure() throws Exception { JaxbDataFormat jaxb = new JaxbDataFormat(false); jaxb.setContextPath("uk.co.validus.claim.ws.v2"); // comment @PayloadRoot annotation in ClaimEndpointV2.java to enable requests to be mapped to this camel route from("*spring-ws:rootqname:{http://validus.co.uk/claim/ws/v2}getClaimRequest?endpointMapping=#endpointMapping <http://validus.co.uk/claim/ws/v2}getClaimRequest?endpointMapping=#endpointMapping>* ") .to("log:uk.co.validus.claim.ws.v2?level=INFO") .unmarshal(jaxb) .process(new ClaimProcessor()) .marshal(jaxb); } } According to the log (below) incoming requests are successfully mapped to my Camel Consumer, but then it fails with 'No adapter for endpoint' [2015-06-24 13:22:03.981] boot - 6892 DEBUG [http-nio-8090-exec-6] --- WsdlDefinitionHandlerAdapter: Transforming [/ws] to [ http://localhost:8090/ws] [2015-06-24 13:22:03.983] boot - 6892 DEBUG [http-nio-8090-exec-6] --- MessageDispatcherServlet: Successfully completed request [2015-06-24 13:22:13.544] boot - 6892 DEBUG [http-nio-8090-exec-7] --- WebServiceMessageReceiverHandlerAdapter: Accepting incoming [org.springframework.ws.transport.http.HttpServletConnection@70863933] at [ http://localhost:8090/ws] [2015-06-24 13:22:13.547] boot - 6892 DEBUG [http-nio-8090-exec-7] --- received: Received request [SaajSoapMessage { http://validus.co.uk/claim/ws/v2}getClaimRequest] [2015-06-24 13:22:13.547] boot - 6892 DEBUG [http-nio-8090-exec-7] --- PayloadRootAnnotationMethodEndpointMapping: Looking up endpoint for [{ http://validus.co.uk/claim/ws/v2}getClaimRequest] [2015-06-24 13:22:13.547] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapMessageDispatcher: Endpoint mapping [org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping@5fdbde50] has no mapping for request [2015-06-24 13:22:13.547] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapActionAnnotationMethodEndpointMapping: Looking up endpoint for [] [2015-06-24 13:22:13.547] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapMessageDispatcher: Endpoint mapping [org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping@50bf4dcb] has no mapping for request [2015-06-24 13:22:13.547] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapMessageDispatcher: Endpoint mapping [org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping@8b5028a] has no mapping for request *[2015-06-24 13:22:13.548] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapMessageDispatcher: Endpoint mapping [org.apache.camel.component.spring.ws.bean.CamelEndpointMapping@7a9ff5b1] maps request to endpoint [Consumer[spring-ws://rootqname:(http://validus.co.uk/claim/ws/v2)getClaimRequest?endpointMapping=%23endpointMapping <http://validus.co.uk/claim/ws/v2)getClaimRequest?endpointMapping=%23endpointMapping>]]* [2015-06-24 13:22:13.548] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapMessageDispatcher: Testing endpoint adapter [org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter@5a1e093a ] [2015-06-24 13:22:13.549] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapFaultAnnotationExceptionResolver: Resolving exception from endpoint [Consumer[spring-ws://rootqname:( http://validus.co.uk/claim/ws/v2)getClaimRequest?endpointMapping=%23endpointMapping]]: java.lang.IllegalStateException: No adapter for endpoint [Consumer[spring-ws://rootqname:( http://validus.co.uk/claim/ws/v2)getClaimRequest?endpointMapping=%23endpointMapping]]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint? [2015-06-24 13:22:13.549] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SimpleSoapExceptionResolver: Resolving exception from endpoint [Consumer[spring-ws://rootqname:( http://validus.co.uk/claim/ws/v2)getClaimRequest?endpointMapping=%23endpointMapping]]: java.lang.IllegalStateException: No adapter for endpoint [Consumer[spring-ws://rootqname:( http://validus.co.uk/claim/ws/v2)getClaimRequest?endpointMapping=%23endpointMapping]]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint? [2015-06-24 13:22:13.549] boot - 6892 DEBUG [http-nio-8090-exec-7] --- SoapMessageDispatcher: Endpoint invocation resulted in exception - responding with Fault java.lang.IllegalStateException: No adapter for endpoint [Consumer[spring-ws://rootqname:( http://validus.co.uk/claim/ws/v2)getClaimRequest?endpointMapping=%23endpointMapping]]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint? at org.springframework.ws.server.MessageDispatcher.getEndpointAdapter(MessageDispatcher.java:302) at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:235) at org.springframework.ws.server.MessageDispatcher.reessageDispatcher.java:176) at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:89) at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:61) at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:293) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catali.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) [2015-06-24 13:22:13.554] boot - 6892 DEBUG [http-nio-8090-exec-7] --- sent: Sent response [SaajSoapMessage { http://schemas.xmlsoap.org/soap/envelope/}Fault] for request [SaajSoapMessage {http://validus.co.uk/claim/ws/v2}getClaimRequest] [2015-06-24 13:22:13.556] boot - 6892 DEBUG [http-nio-8090-exec-7] --- MessageDispatcherServlet: Successfully completed request My gradle dependencies are as follows: dependencies { compile("org.springframework.boot:spring-boot-starter-ws") { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } compile("org.springframework.boot:spring-boot-starter") { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } compile("org.springframework.boot:spring-boot-starter-log4j") compile("org.springframework:spring-web") compile("com.fasterxml.jackson.core:jackson-databind") compile("org.apache.camel:camel-core:2.15.2") compile("org.apache.camel:camel-spring-boot:2.15.2") compile("org.apache.camel:camel-spring-ws:2.15.2") compile("org.apache.camel:camel-jaxb:2.15.2") testCompile("org.springframework.boot:spring-boot-starter-test") compile 'org.slf4j:slf4j-log4j12:1.7.12' compile("wsdl4j:wsdl4j:1.6.1") jaxb("com.sun.xml.bind:jaxb-xjc:2.2.4-1") compile sourceSets.generated.output } The only other major change to the original project from http://spring.io/guides/gs/producing-web-service/ is that I've removed the verbose ant-based jaxb task from the gradle build file and replace it with a gradle jaxb plugin (com.github.jacobono:gradle-jaxb-plugin:1.3.6) (Could JAXB versions be an issue?) Am I missing a key piece of configuration/annotation or is there a more fundamental problem? Any help or insights much appreciated. Thanks Matthew -- *Matthew Wells*Software Developer *Validus-IVC Ltd*Paston House 11-13 Princes Street Norwich NR3 1AZ Email: m.we...@validus-ivc.co.uk PLEASE NOTE: The information contained in this e-mail message may be privileged and/or confidential. It is for intended addressee(s) only. If you are not the intended recipient, you are hereby notified that any disclosure, reproduction distribution or other use of this communication is strictly prohibited and could, in certain circumstances, be a criminal offence. If you have received this e-mail in error, please notify the sender by reply and delete the message without copying or disclosing it. Thank you Validus-IVC Ltd Registered in England Company No. 06233602 VAT No. 160538322 Registered office: Paston House, 11-13 Princes Street, Norwich, NR3 1AZ