camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jjb <jj_burf...@yahoo.com>
Subject Re: bean binding with inheritance & 2.0-M3 camel-http
Date Tue, 04 Aug 2009 07:26:17 GMT

Hi.

Thanks for the quick response.  I switched to 2.0-M3 and still had the
problem - the BaseClass.onMessage still gets called.  Is there a newer
release or something I can check out that might have this fix?  Also, when I
use 2.0-M3, how do I get the HttpServletResponse (your suggestion to get the
HttpServletRequest worked for me - thanks)?

Regards


Claus Ibsen-2 wrote:
> 
> Hi
> 
> On Tue, Aug 4, 2009 at 7:52 AM, jjb<jj_burford@yahoo.com> wrote:
>>
>> I have a hierarchy of objects which looks like this:
>>
>> public BaseClass implements javax.jms.MessageListener
>> {
>>    public void onMessage(javax.jms.Message message)
>>    {
>>        // do something
>>    }
>> }
>>
>> public DerivedClass extends BaseClass
>> {
>>    public void process(String body)
>>    {
>>        // do something
>>    }
>> }
>>
>> I then have the following XML in my camel-context.xml:
>>
>> <bean id="processor" class="DerivedClass"/>
>>
>> <route>
>>      <from uri="activemq:request.queue"/>
>>      <to uri="bean:processor?method=process"/>
>> </route>
>>
>> When I run this code, all messages from request.queue always go to
>> BaseClass.onMessage, even though I explicitly want them to go to
>> DerivedClass.process.  Have I done something wrong or is this a bug (I
>> read
>> through the bean binding and it said it would first use methods that were
>> explicitly specified in the bean's method parameter)?
>>
> 
> We have fixed a bug in this relation in 2.0.x (cant remember the
> version, might be the 2.0m3).
> 
> In older versions you can work around this by adding an @Body
> annotation to your base class
>     public void process(@Body String body)
> And Camel should prefer to use this method.
> 
> 
> 
>> I also notice that the new 2.0-M3 version of camel-http no longer
>> contains
>> the class org.apache.camel.component.http.HttpExchange.  Therefore, this
>> code no longer compiles:
>>
>>        public void process(Exchange exchange)
>>        {
>>                try
>>                {
>>                        HttpServletResponse response =
>> ((HttpExchange)exchange).getResponse();
>>                        HttpServletRequest request =
>> ((HttpExchange)exchange).getRequest();
>>                        HttpSession session = null;
>>                        if (request != null)
>>                                session = request.getSession(true);
>>                 }
>>                catch (Exception e)
>>                { e.printStackTrace(); }
>>         }
>>
>> Is there a new way to get the HttpServletResponse and such from the
>> Exchange
>> parameter?
> 
> Its on the HttpMessage instead.
> 
> HttpMessage in = (HttpMessag) exchange.getIn();
> HttpServletRequest = in.getRequest();
> 
> 
>>
>> Regards
>> --
>> View this message in context:
>> http://www.nabble.com/bean-binding-with-inheritance---2.0-M3-camel-http-tp24802648p24802648.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> 
> 

-- 
View this message in context: http://www.nabble.com/bean-binding-with-inheritance---2.0-M3-camel-http-tp24802648p24803535.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message