Hi

You actually also needs to add ?throwExceptionOnFailure=false to the
HTTP endpoint to be able return the various error codes as is.
In case eg the HTTP returns a http error 301 and you want it to be
returned as it to jetty.

PS: We should probably look into letting Jetty "understand"
HttpOperationFailedException and fetch the error code and error
message from it directly.



On Fri, Aug 7, 2009 at 3:27 PM, Claus Ibsen<[email protected]> wrote:
> On Fri, Aug 7, 2009 at 1:25 PM, Willem Jiang<[email protected]> wrote:
>> That's because other components in Camel 2.0 will use the Exchange.HTTP_URI
>> and Exchange.HTTP_PATH to do some work.
>>
>> Maybe we can add an option in http endpoint to ignore these two headers if
>> you still want to use the HTTP bridge as Camel 1.x.
>>
>
> Yeah it could make sense to have a boolean option that will force it
> to only use the static URI defined on the endpoint.
> As messages could come from many different sources that are HTTP based
> and thus would have a "dynamic" URI header.
>
>
>> Willem
>> _Jens wrote:
>>>
>>> Hi,
>>>
>>> in Camel 1.x you could write a simple HTTP bridge like this:
>>>
>>>         CamelContext camelContext = new DefaultCamelContext();
>>>         camelContext.addRoutes(new RouteBuilder() {
>>>           �...@override
>>>            public void configure() throws Exception {
>>>
>>> from("jetty:http://localhost:8435/path1";).to("http://localhost:8435/path2";);
>>>
>>> from("jetty:http://localhost:8435/path2";).transform().constant("OK");
>>>            }
>>>         });
>>>         camelContext.start();
>>>                 ProducerTemplate producerTemplate =
>>> camelContext.createProducerTemplate();
>>>         InputStream result = (InputStream)
>>> producerTemplate.requestBody("http://localhost:8435/path1";, "Hello");
>>>         assertEquals("OK", IOUtils.toString(result));
>>>
>>> in Camel 2.0 this doesn't work anymore because the Exchange.HTTP_URI and
>>> Exchange.HTTP_PATH are set by the consumer that received the initial
>>> request. The HttpProducer that is called because of the to() then "thinks"
>>> those header properties were set to define the actual destination and
>>> sends
>>> the data to "/path1/path1", which leads to an error. You have to
>>> explicitly
>>> remove those properties from the exchange to make it work:
>>>
>>>                from("jetty:http://localhost:8435/path1";)
>>>                    .removeHeader(Exchange.HTTP_URI)
>>>                    .removeHeader(Exchange.HTTP_PATH)
>>>                    .to("http://localhost:8435/path2";);
>>>
>>> I can't think of any use for this behavior and it is rather surprising.
>>> However, I understand that it might be a side effect that we have to live
>>> with because the header property names are now shared between the
>>> endpoints.
>>> Anyway, is this the way it is supposed to work now or is it worth to
>>> submit
>>> a bug report for this? Are there any other properties that should be
>>> removed
>>> to ensure that the to() really sends it to the destination it is supposed
>>> to?
>>>
>>> Thanks,
>>> Jens
>>
>>
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Reply via email to