Hi Bing,
simple question, why don't you write e.g. a processor that is configured to
your route. Your route could look like thos:
/** Processor defined as spring bean, e.g. via @Named tag */
@Inject
MyHeaderExtractor myHeaderExtractor;
public void configure() throws Exceltion {
from("direct:GetCustomer")
.setHeader("direct:GetCustomer")
// ... continue with your setter to the header
.process(myHeaderExtractor)
.to(endpoint);
}
Your header extractor can than implement the processor interface which forces
you to implement a process(Exchange exchange) method.
You could also decide simply using the bean processing capabilities of camel as
an alternative approach.
@Named
public class MyHeaderExtractor extends Processor {
public void process(Exchange exchange) {
exchange.getIn().getHeaders(); // returns the header map on the
in exchange
exchange.getIn().getBody(); // returns the body on the in
exchange
// Here you can add some specific header extractions for
whatever you need it
exchange.getOut().getHeaders(); // Would give you the out header
}
}
Hope this helps, best regards,
Christoph
On Jul 23, 2012, at 7:06 PM, bitter geek wrote:
> Hi Sergey,
>
> Thanks for the reply.
>
> I'm quite new to Camel. I knew you can get it from the out message but
> how do I access the out message from the code snippet I provided?
>
> I'd like to know what is the best way to access both the status and
> the response message as a string.
>
> On 7/23/12, Sergey Beryozkin <[email protected]> wrote:
>> Hi
>> On 23/07/12 16:43, bitter geek wrote:
>>> Hi All,
>>>
>>> I have a router builder for a rest service with configure override
>>> like the following:
>>> ...
>>> @Override
>>> public void configure() throws Exception {
>>> from("direct:GetCustomer")
>>> .setHeader("Content-Type",
>>> constant("application/x-www-form-urlencoded"))
>>> .setHeader(Exchange.HTTP_METHOD, constant("GET"))
>>> .setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API,
>>> constant(Boolean.TRUE))
>>> .setHeader(Exchange.HTTP_PATH, simple("${header.httpPath}"))
>>> .setHeader(Exchange.HTTP_QUERY,
>>> simple(getURIComponentQuery()))
>>> .to(endpoint);
>>> }
>>> ...
>>>
>>>
>>> The rest service returns an xml document. I don't have the xsd for it
>>> so would like to set the type of the response to String via
>>> convertBodyTo(String.class).
>>>
>>> But once I do this, producerTemplate.requestBodyAndHeaders(null,
>>> headers) returns a String object. So I lose the status code.
>>>
>>> Noting converting it to string will let me access the status code but
>>> then I no longer have the text body available.
>>>
>>> Any idea how to get both the status code and the text body properly?
>>>
>>> Thanks a lot for the help!
>> I can see from the code that a status code is set as
>> Exchange.HTTP_RESPONSE_CODE header on the out message, so you should be
>> able to get it from there
>>
>> Cheers, Sergey
>>
>>>
>>> Bing
>>
>>