Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
h2. UrlRewrite Component
*Available as of Camel 2.11*

The {{camel-urlrewrite}} component allows to plugin url rewrite functionality to [HTTP], [HTTP4], [Jetty], or [AHC] components. This component integrates the [UrlRewriteFilter|http://code.google.com/p/urlrewritefilter/] project with Apache Camel. This allows you to use the capabilities from the url rewrite project with your Camel routes.

This component *requires* that your Camel routes starts from a servlet based endpoint such as [Jetty] or [Servlet].

h3. Options

The {{camel-urlrewrite}} component offers the following options

{div:class=confluenceTableSmall}
|| Name || Default Value || Description ||
| {{conf}} | {{null}} | To use a custom {{org.tuckey.web.filters.urlrewrite.Conf}} as the configuration for the url rewrite filter. |
| {{configFile}} | {{null}} | Refers to a file name to load as the configuration file. The file should be XML file. |
| {{modRewriteConfFile}} | {{null}} | Refers to a file name to load as the mod based configuration file. This file should be a plain text file. |
| {{modRewriteConfText}} | {{null}} | Is used to quickly configure a mod based configuration without using a file. |
| {{useQueryString}} | {{false}} | Whether to use query strings in the url rewrite rules. |
| {{useContext}} | {{false}} | Whether to include context-path or not in the matching. Will be default remove the context-path. |
| {{defaultMatchType}} | {{"regex"}} | Which match type to use. Can be either "wildcard" or "regex". |
| {{decodeUsing}} | {{null}} | To use a specific encoding such as "utf-8" or "iso-8859-1". |
{div}

h3. Usage

The following component producers supports using together with the {{camel-urlrewrite}} component: [Http], [Http4] [Jetty].

{div:class=confluenceTableSmall}
|| Component || Class ||
| {{camel-http}} | {{org.apache.camel.component.urlrewrite.http.HttpUrlRewrite}} |
| {{camel-jetty}} | {{org.apache.camel.component.urlrewrite.http.HttpUrlRewrite}} |
| {{camel-http4}} | {{org.apache.camel.component.urlrewrite.http4.HttpUrlRewrite}} |
{div}

You setup the url rewrite as a bean such of the type {{org.apache.camel.component.urlrewrite.http.HttpUrlRewrite}} (when using [Http] component) as shown below:
TODO: java{snippet:id=e1|lang=java|url=camel/trunk/components/camel-urlrewrite/src/test/java/org/apache/camel/component/urlrewrite/jetty/JettyUrlRewriteTest.java}

And in XML DSL you can do:
TODO: xml{code:xml}
<bean id="myRewrite" class="org.apache.camel.component.urlrewrite.HttpUrlRewrite">
  <property name="configFile" value="example/urlrewrite2.xml"/>
</bean>
{code}

In the Camel routes
TODO: route, you bridge the endpoints, and refer to the url rewrite on the producer endpoint as shown below. Notice how we refer to our url rewrite filter using the {{urlRewrite}} option in the endpoint uri.
{snippet:id=e2|lang=java|url=camel/trunk/components/camel-urlrewrite/src/test/java/org/apache/camel/component/urlrewrite/jetty/JettyUrlRewriteTest.java}

h3. Writing custom url rewriters

You can implement your custom url rewriters by implementing either of the following interfaces from the component of choice:

Component(s): camel-http / camel-jetty
- {{org.apache.camel.component.http.UrlRewrite}}
- {{org.apache.camel.component.http.HttpServletUrlRewrite}}

Component(s): camel-http4
- {{org.apache.camel.component.http4.UrlRewrite}}
- {{org.apache.camel.component.http4.HttpServletUrlRewrite}}

The former is a simple and generic interface, which is not dependent on the Servlet API.
The later is servlet based which requires the Camel route to start from a servlet based component such as [Jetty] or [Servlet]. The servlet based is more feature rich and that's the API we use to integrate with the [UrlRewriteFilter|http://code.google.com/p/urlrewritefilter/] project in this {{camel-urlrewrite}} component.

h4. A simple url rewrite filter

In this example we implement a custom {{org.apache.camel.component.http.UrlRewrite}} that just replaces yahoo with google. Mind this example is based on a unit test, and only for demonstration purposes. As its java code you have full power to implement more complex logic.

The url parameter contains the full url including scheme://hostname:port/path?query. The relativeUrl parameter is the url without the endpoint configured path. Notice this option may be null if the url doesn't start with the endpoint configured path. 

{snippet:id=e1|lang=java|url=camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/GoogleUrlRewrite.java}


{include:Endpoint See Also}
- [Jetty]
- [Http4]
- [Http]
- [AHC]