I am afraid the restlet component does not set the HTTP response code
anywhere. I am using a simple logger to inspect the Exchange instance
comming from the restlet:

        <bean id="header.logger"
                 class="ExchangeHeadersInspector" />

where the ExchengeHeadersInspector is coded in Scala:

import org.apache.camel.Exchange
import se.scalablesolutions.akka.util.Logging

import org.apache.camel.Processor

class ExchangeHeadersInspector extends Processor with Logging {

   def process(exchange: Exchange): Unit = { 
       log.debug("in.headers: %s" format exchange.getIn.getHeaders)
       log.debug("exchange.properties: %s" format exchange.getProperties)
       log.debug("exchange.failed: %s" format exchange.isFailed)
   }

}

As you can see from the log produced by it there is no key
CamelHttpResponseCode within the exchange.getIn.getHeaders map:

[DEBUG] [2010-09-30 14:57:47,017] [main]
c.b.i.c.a.l.ExchangeHeadersInspector: in.headers:
{org.restlet.http.headers=[Server: Apache-Coyote/1.1, Content-Type:
text/html;charset=utf-8, Content-Length: 1090, Date: Thu, 30 Sep 2010
12:57:46 GMT, Connection: close]}
[DEBUG] [2010-09-30 14:57:47,018] [main]
c.b.i.c.a.l.ExchangeHeadersInspector: exchange.properties:
{CamelToEndpoint=http:// ... }
[DEBUG] [2010-09-30 14:57:47,018] [main]
c.b.i.c.a.l.ExchangeHeadersInspector: exchange.failed: false

Is it possible that it is stripped down from the Exchange while routing from
the restlet to my process component?

Anyway I also tried something similar that Claus suggested and inserted some
validation before the JSON unmarshalling:

                <camel:route>
            <camel:from uri="direct:rest"/>
            <camel:to uri="restlet:http://somewhere.net/path/to/rest/api"/>
            <camel:process ref="header.logger" />
            <camel:validate>
                <camel:simple>${header.CamelHttpResponseCode} == 
200</camel:simple>
            </camel:validate>
            <camel:unmarshal ref="json" />
                </camel:route>

And even in case of 200 response code I received exception as there is no
CamelHttpResponseCode key in the headers map:

SEVERE: Failed delivery for exchangeId:
b71067ad-e305-4762-a4e7-f7baab6dd42d. Exhausted after delivery attempt: 1
caught: org.apache.camel.processor.validation.PredicateValidationException:
Validation failed for Predicate[header(CamelHttpResponseCode) == 200].
Exchange[Message: ... ]
org.apache.camel.processor.validation.PredicateValidationException:
Validation failed for Predicate[header(CamelHttpResponseCode) == 200].
Exchange[Message: ... ]
...

Petr
-- 
View this message in context: 
http://camel.465427.n5.nabble.com/Restlet-HTTP-status-and-message-tp3047023p3068911.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to