<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->

<!-- START SNIPPET: e1 -->
<!-- here we have the Camel route(s). -->
<!-- we must still use the http://camel.apache.org/schema/spring namespace so Camel can load the routes
     though Spring JARs is not required -->
<routes xmlns="http://camel.apache.org/schema/spring">

  <route>
    <!-- incoming requests from the servlet is routed -->
    <from uri="servlet:///hello"/>
    <choice>
      <when>
        <!-- is there a header with the key name? -->
        <header>name</header>
        <!-- yes so return back a message to the user -->
        <transform>
          <simple>Hello ${header.name} how are you?</simple>
        </transform>
      </when>
      <otherwise>
        <!-- if no name parameter then output a syntax to the user -->
        <transform>
          <constant>Add a name parameter to uri, eg ?name=foo</constant>
        </transform>
      </otherwise>
    </choice>
  </route>

</routes>
<!-- END SNIPPET: e1 -->