This Confluence has been LDAP enabled, if you are an ASF Committer, please use your LDAP Credentials to login. Any problems file an INFRA jira ticket please.

Child pages
  • Spring WS Example

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

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 examples/camel-example-spring-ws/client.

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:

Code Block
XML
XML
<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>

The 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.

The above endpointMapping bean is automatically picked up by the MessageDispatcherServlet declared in web.xml:

Code Block
XML
XML
<servlet>
	<servlet-name>spring-ws</servlet-name>
	<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
</servlet>

Since

...

the

...

servlet

...

is

...

named

...

spring-ws

...

it

...

will

...

look

...

for

...

the file /WEB-INF/spring-ws-servlet.xml

...

containing the earlier mentioned endpointMapping bean.