...
Servlet
...
Component
...
The
...
servlet:
...
component
...
provides
...
HTTP
...
based
...
...
for
...
consuming
...
HTTP
...
requests
...
that
...
arrive
...
at
...
a
...
HTTP
...
endpoint
...
that
...
is
...
bound
...
to
...
a
...
published
...
Servlet.
...
Maven
...
users
...
will
...
need
...
to
...
add
...
the
...
following
...
dependency
...
to
...
their
...
pom.xml
...
for
...
this
...
component:
...
...
Servlet is stream based, which means the input it receives is submitted to Camel as a stream. That means you will only be able to read the content of the stream once. If you find a situation where the message body appears to be empty or you need to access the data multiple times (eg: doing multicasting, or redelivery error handling) you should use Stream caching or convert the message body to a String
which is safe to be read multiple times.
URI format
...
You can append query options to the URI in the following format, ?option=value&option=value&...
...
Options
...
Name | Default Value | Description |
---|---|---|
|
| Reference to an |
httpBinding | null | Camel 2.16: Reference to an org.apache.camel.component.http.HttpBinding |
...
in |
...
the |
...
...
. |
...
A |
...
HttpBinding |
...
implementation |
...
can |
...
be |
...
used |
...
to |
...
customize |
...
how |
...
to |
...
write |
...
a |
...
response. |
...
|
| Whether or not the |
|
| Specifies the servlet name that the servlet endpoint will bind to. This name should match the name you define in |
| null | Camel 2.11: Consumer only: Used to only allow consuming if the HttpMethod matches, such as GET/POST/PUT etc. From Camel 2.15 onwards multiple methods can be specified separated by comma. |
Message Headers
Camel will apply the same Message Headers as the HTTP component.
Camel will also populate all request.parameter
and request.headers
. For example, if a client request has the URL, http://myserver/myserver?orderid=123
...
,
...
the
...
exchange
...
will
...
contain
...
a
...
header
...
named
...
orderid
...
with
...
the
...
value
...
123.
...
Usage
You can consume only from endpoints generated by the Servlet component. Therefore, it should be used only as input into your Camel routes. To issue HTTP requests against other HTTP endpoints, use the HTTP Component
Using Servlet 3.0 Async Mode
Available as of Camel 2.18
You can configure the servlet with an init-param to turn on async mode when using a Servlet 3.x container. There is a sample XML configuration below:
...
Putting Camel JARs in the app server boot classpath
If you put the Camel JARs such as camel-core
, camel-servlet
, etc. in the boot classpath of your application server (eg usually in its lib directory), then mind that the servlet mapping list is now shared between multiple deployed Camel application in the app server.
Mind that putting Camel JARs in the boot classpath of the application server is generally not best practice!
So in those situations you must define a custom and unique servlet name in each of your Camel application, eg in the web.xml
define:
...
And in your Camel endpoints then include the servlet name as well
...
From Camel 2.11
...
onwards
...
Camel
...
will
...
detect
...
this
...
duplicate
...
and
...
fail
...
to
...
start
...
the
...
application.
...
You
...
can
...
control
...
to
...
ignore
...
this
...
duplicate
...
by
...
setting
...
the
...
servlet
...
init-parameter
...
ignoreDuplicateServletName
...
to
...
true
...
as
...
follows:
...
...
But its strongly advised to use unique servlet-name
...
for
...
each
...
Camel
...
application
...
to
...
avoid
...
this
...
duplication
...
clash,
...
as
...
well
...
any
...
unforeseen
...
side-effects.
...
Sample
...
From Camel 2.7
...
onwards
...
it's
...
easier
...
to
...
use
...
...
in
...
Spring
...
web
...
applications.
...
See
...
...
...
...
for
...
details.
...
In this sample,
...
we
...
define
...
a
...
route
...
that
...
exposes
...
a
...
HTTP
...
service
...
at
...
http://localhost:8080/camel/services/hello
...
.
...
First,
...
you
...
need
...
to
...
publish
...
the
...
...
through
...
the
...
normal
...
Web
...
Container,
...
or
...
OSGi
...
Service.
...
Use
...
the
...
Web.xml
...
file
...
to
...
publish
...
the
...
...
as
...
follows:
...
...
Then
...
you
...
can
...
define
...
your
...
route
...
as
...
follows:
...
...
...
Since
...
we
...
are
...
binding
...
the
...
Http
...
transport
...
with
...
a
...
published
...
servlet,
...
and
...
we
...
don't
...
know
...
the
...
servlet's
...
application
...
context
...
path,
...
the
...
camel-servlet
...
endpoint
...
uses
...
the
...
relative
...
path
...
to
...
specify
...
the
...
endpoint's
...
URL.
...
A
...
client
...
can
...
access
...
the
...
camel-servlet
...
endpoint
...
through
...
the
...
servlet
...
publish
...
address:
...
("http://localhost:8080/camel/services")
...
+
...
RELATIVE_PATH("/hello")
...
.
Sample when using Spring 3.x
...
See
...
...
...
Sample when using Spring 2.x
...
When
...
using
...
the
...
Servlet
...
component
...
in
...
a
...
Camel/Spring
...
application
...
it's
...
often
...
required
...
to
...
load
...
the
...
Spring
...
ApplicationContext
...
after
...
the
...
Servlet
...
component
...
has
...
started.
...
This
...
can
...
be
...
accomplished
...
by
...
using
...
Spring's
...
ContextLoaderServlet
...
instead
...
of
...
ContextLoaderListener
...
.
...
In
...
that
...
case
...
you'll
...
need
...
to
...
start
...
ContextLoaderServlet
...
after
...
...
like
...
this:
...
...
Sample when using OSGi
From Camel 2.6.0
...
,
...
you
...
can
...
publish
...
the
...
...
as
...
an
...
OSGi
...
service
...
with
...
help
...
of
...
SpringDM
...
like
...
this.
...
...
Then
...
use
...
this
...
service
...
in
...
your
...
camel
...
route
...
like
...
this:
...
...
For
...
versions
...
prior
...
to
...
Camel
...
2.6
...
you
...
can
...
use
...
an
...
Activator
...
to
...
publish
...
the
...
...
on
...
the
...
OSGi
...
platform
...
...
...
...
...
...
...
...
...
...
...
...