Spring Web Services Example
Available as of Camel 2.6
This example shows how to expose a SOAP-based web service using Camel and Spring Web Services.
Running the example
The example is included in the distribution at
examples/camel-example-spring-ws. To start the example use Maven:
This will expose a web service on
http://localhost:8080/increment. With the help of a tool such as Soap-UI it's easy to sent messages to this endpoint. There's a ready to use SOAP-UI project available at
Code walk through
The Camel route exposing that exposes the above web service is defined as:
Taking a closer look at the URI reveals that this route consumes messages with a certain
rootqname. In this case it listens for messages with root element
incrementRequest defined in the
http://camel.apache.org/example/increment namespace. These XML messages are unmarshalled to Java objects using Camel's Data Format support (JAXB in this case). After processing the resulting object is marshalled back to XML and returned to the client as a response.
Further notice that the URI contains a reference to an
endpointMapping in the Registry. Since we're using Spring the registry is a Spring ApplicationContext defined in
spring-ws-servlet.xml. This file contains the following bean:
<bean id="endpointMapping" class="org.apache.camel.component.spring.ws.bean.CamelEndpointMapping"> <property name="interceptors"> <list> <ref local="validatingInterceptor" /> <ref local="loggingInterceptor" /> </list> </property> </bean>
endpointMapping This bean is a Spring-WS endpoint mapping that maps incoming messages to appropriate Camel routes. You'll only need to define a single one
CamelEndpointMapping, regardless of the number of Camel routes using that use Spring-WS endpoints.
endpointMapping bean is automatically picked up by the
MessageDispatcherServlet declared in
<servlet> <servlet-name>spring-ws</servlet-name> <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> </servlet>
containing the earlier mentioned