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 Fri, 07 Aug 2009 00:44:26 GMT

FYI -

The latest SNAPSHOT also doesn't contain the bean?method= fix either.

Regards


jjb wrote:
> 
> Hi
> 
> I have another question regarding how to obtain the body of the HTTP
> message.  Before the latest SNAPSHOT (in 2.0-M2), I used to be able to do
> this:
> 
> String body = (String)exchange.getIn().getBody((new String()).getClass());
> 
> This now gives me an empty String.  Do you know how I can get the body of
> an HTTP post now?
> 
> Regards
> 
> 
> jjb wrote:
>> 
>> Hi, Claus.
>> 
>> I was hoping to get the latest SNAPSHOT with the HttpMessage.getResponse
>> method implemented.  I just updated from the SNAPSHOT repo and verified
>> it's not there yet:
>> 
>> stealth: wget --no-check-certificate
>> https://repository.apache.org/content/repositories/snapshots//org/apache/camel/camel-http/2.0-SNAPSHOT/camel-http-2.0-SNAPSHOT.jar
>> --2009-08-06 15:28:08-- 
>> https://repository.apache.org/content/repositories/snapshots//org/apache/camel/camel-http/2.0-SNAPSHOT/camel-http-2.0-SNAPSHOT.jar
>> Resolving repository.apache.org... 140.211.11.100
>> Connecting to repository.apache.org|140.211.11.100|:443... connected.
>> WARNING: cannot verify repository.apache.org's certificate, issued by
>> `/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com,
>> Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure
>> Certification Authority/serialNumber=07969287':
>>   Self-signed certificate encountered.
>> HTTP request sent, awaiting response... 200 OK
>> Length: 42721 (42K) [text/plain]
>> Saving to: `camel-http-2.0-SNAPSHOT.jar'
>> 
>> 100%[=================================================================================================================================================>]
>> 42,721      73.7K/s   in 0.6s    
>> 
>> 2009-08-06 15:28:09 (73.7 KB/s) - `camel-http-2.0-SNAPSHOT.jar' saved
>> [42721/42721]
>> 
>> stealth: javap -classpath camel-http-2.0-SNAPSHOT.jar
>> org.apache.camel.component.http.HttpMessage
>> Compiled from "HttpMessage.java"
>> public class org.apache.camel.component.http.HttpMessage extends
>> org.apache.camel.impl.DefaultMessage{
>>     public
>> org.apache.camel.component.http.HttpMessage(org.apache.camel.Exchange,
>> javax.servlet.http.HttpServletRequest);
>>     public javax.servlet.http.HttpServletRequest getRequest();
>>     protected java.lang.Object createBody();
>> }
>> 
>> stealth: 
>> 
>> 
>> Do you know when it might make it into the repo?
>> 
>> Thanks!
>> 
>> 
>> Claus Ibsen-2 wrote:
>>> 
>>> Hi
>>> 
>>> Also the bean method name issue has been fixed in trunk.
>>> So if possible please test it at your side by building from source or
>>> try SNAPSHOT when a new build is published to apache maven repos.
>>> 
>>> On Wed, Aug 5, 2009 at 1:55 PM, Claus Ibsen<claus.ibsen@gmail.com>
>>> wrote:
>>>> Hi
>>>>
>>>> Okay I am committing a fix in short time.
>>>>
>>>> You can grab it using 2 ways
>>>> - from the body using the camel type converter, to avoid ugly java type
>>>> casts
>>>> - using java type cast to cast the message to HttpMessage
>>>>
>>>>            // we have access to the HttpServletRequest here and we
>>>> can grab it if we need it
>>>>            HttpServletRequest req =
>>>> exchange.getIn().getBody(HttpServletRequest.class);
>>>>            assertNotNull(req);
>>>>
>>>>            // we have access to the HttpServletResponse here and we
>>>> can grab it if we need it
>>>>            HttpServletResponse res =
>>>> exchange.getIn().getBody(HttpServletResponse.class);
>>>>            assertNotNull(res);
>>>>
>>>>            // and they should also be on HttpMessage
>>>>            HttpMessage msg = (HttpMessage) exchange.getIn();
>>>>            assertNotNull(msg.getRequest());
>>>>            assertNotNull(msg.getResponse());
>>>>
>>>> And use the output stream to write to the servlet response
>>>>
>>>>            // and we can use servlet response to write to output stream
>>>> also
>>>>            res.getOutputStream().print("Written by servlet response");
>>>>
>>>>
>>>> On Wed, Aug 5, 2009 at 10:55 AM, Claus Ibsen<claus.ibsen@gmail.com>
>>>> wrote:
>>>>> Hi
>>>>>
>>>>> Cool I have added a ticket to get it back
>>>>> https://issues.apache.org/activemq/browse/CAMEL-1879
>>>>>
>>>>>
>>>>> On Wed, Aug 5, 2009 at 10:52 AM, jjb<jj_burford@yahoo.com> wrote:
>>>>>>
>>>>>> Hi, Claus.
>>>>>>
>>>>>> I built a framework to receive status related messages from a topic
>>>>>> as the
>>>>>> route is traversed.  Consider the routes the define DerivedClass
-> A
>>>>>> -> B
>>>>>> -> C.  As each segment in the route executes, it sends JAXB/XML
>>>>>> messages to
>>>>>> a topic that are then forwarded back to the client via a callback.
>>>>>>  As the
>>>>>> DerivedClass receives these messages, it sends them back over the
>>>>>> HTTP
>>>>>> socket (via the HttpServletResponse) to the invoking web client.
>>>>>>  This gives
>>>>>> the web client a realtime flow of XML status updates while the
>>>>>> different
>>>>>> endpoints are traversed.  Since I do not want DerivedClass to know
>>>>>> about
>>>>>> Camel or JMS, there is a class which DerivedClass submits a request
>>>>>> to
>>>>>> (manager instance below) that also listens on this topic for related
>>>>>> status
>>>>>> messages.  These I get via callback and write them to the web client
>>>>>> accordingly:
>>>>>>
>>>>>>
>>>>>> public interface Client
>>>>>> {
>>>>>>    public void notify(String status);
>>>>>> }
>>>>>>
>>>>>> public DerivedClass implements Client
>>>>>> {
>>>>>>    HttpServletResponse response;
>>>>>>
>>>>>>    public void process(Exchange exchange)
>>>>>>    {
>>>>>>        HttpServletResponse response = ....;   // need to know
how to
>>>>>> get
>>>>>> this
>>>>>>        String request = "MY XML REQUEST";   // this is actually
a
>>>>>> JAXB
>>>>>> serialized object
>>>>>>
>>>>>>        // submit XML request to class which listens on topic
and
>>>>>> calls
>>>>>> notify with stuff for us
>>>>>>        manager.submit(request, this);
>>>>>>    }
>>>>>>
>>>>>>    // we get our stuff from the manager object which listens on
a
>>>>>> topic and
>>>>>> correlates status
>>>>>>    // messages and calls this notify method
>>>>>>    public notify(String status)
>>>>>>    {
>>>>>>         response.getWriter().println(status);
>>>>>>    }
>>>>>> }
>>>>>>
>>>>>> I was hoping 2.0-M3 Camel would allow access to HttpServletRequest
as
>>>>>> before
>>>>>> 2.0-M3 so I can make my own synchronous writes to the HTTP client
>>>>>> from
>>>>>> DerivedClass with no dependence on Camel.
>>>>>>
>>>>>> Regards
>>>>>>
>>>>>> response.getWriter().println(statusStr)
>>>>>>
>>>>>> Claus Ibsen-2 wrote:
>>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>> Ah the response may be missing on the HttpMessage.
>>>>>>>
>>>>>>> What do you need it for?
>>>>>>>
>>>>>>> On Wed, Aug 5, 2009 at 9:51 AM, jjb<jj_burford@yahoo.com>
wrote:
>>>>>>>>
>>>>>>>> Hi, Claus.
>>>>>>>>
>>>>>>>> Thank you so much for looking into the issue.  My last request
has
>>>>>>>> to do
>>>>>>>> with how to obtain a reference to the HttpServletResponse
in the
>>>>>>>> new (>=
>>>>>>>> 2.0-M3) Camel API.  I can get the HttpServletRequest as
you
>>>>>>>> suggested
>>>>>>>> (using
>>>>>>>> HttpMessage), but how do I obtain a reference to the
>>>>>>>> HttpServletResponse
>>>>>>>> from a method with is the "to" endpoint of a camel-jetty
"from"
>>>>>>>> route
>>>>>>>> that
>>>>>>>> takes an Exchange parameter as so:
>>>>>>>>
>>>>>>>> public void process(Exchange exchange)
>>>>>>>> {
>>>>>>>>    HttpMessage in = (HttpMessag) exchange.getIn();
>>>>>>>>    HttpServletRequest = in.getRequest();
>>>>>>>>
>>>>>>>>    // how do I get to the HttpServletResponse which used
to be
>>>>>>>> accessed <
>>>>>>>> 2.0-M3
>>>>>>>>    // like this: HttpServletResponse response =
>>>>>>>> ((HttpExchange)exchange).getResponse();
>>>>>>>> }
>>>>>>>>
>>>>>>>> Regards
>>>>>>>>
>>>>>>>>
>>>>>>>> Claus Ibsen-2 wrote:
>>>>>>>>>
>>>>>>>>> Hi
>>>>>>>>>
>>>>>>>>> Thanks for the sample. I can reproduce the issue.
>>>>>>>>>
>>>>>>>>> The issue is that your base class implements the
>>>>>>>>> javax.jms.MessageListener.
>>>>>>>>> I will dig into why Camel prefers to invoke this method
over the
>>>>>>>>> method name specified.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Aug 4, 2009 at 8:02 PM, jjb<jj_burford@yahoo.com>
wrote:
>>>>>>>>>>
>>>>>>>>>> Hi.
>>>>>>>>>>
>>>>>>>>>> Attached is an example which recreates the bean issue.
 My goal
>>>>>>>>>> is to
>>>>>>>>>> create
>>>>>>>>>> a framework which localizes JMS/ActiveMQ and Camel
stuff to one
>>>>>>>>>> package.
>>>>>>>>>> Then none of our business logic depends on it (it
just passes
>>>>>>>>>> POJOs
>>>>>>>>>> around
>>>>>>>>>> that are created from XSD using JAXB).  This is
why I can't put
>>>>>>>>>> the
>>>>>>>>>> @Handler
>>>>>>>>>> annotation in the DerivedClass.
>>>>>>>>>> http://www.nabble.com/file/p24813432/camel_bug.tgz
camel_bug.tgz
>>>>>>>>>>
>>>>>>>>>> About the 2.0-M3 Camel interface for HttpServletResponse
- how do
>>>>>>>>>> I get
>>>>>>>>>> it
>>>>>>>>>> from the Exchange?
>>>>>>>>>>
>>>>>>>>>> Thanks!
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Claus Ibsen-2 wrote:
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Aug 4, 2009 at 9:26 AM, jjb<jj_burford@yahoo.com>
wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> 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
>>>>>>>>>>>
>>>>>>>>>>> Hi
>>>>>>>>>>>
>>>>>>>>>>> About the bean problem. Could you create a ticket
for it and
>>>>>>>>>>> attach a
>>>>>>>>>>> small sample with the issue?
>>>>>>>>>>>
>>>>>>>>>>> You can use the @Handler annotation to mark the
method that
>>>>>>>>>>> Camel
>>>>>>>>>>> should use and then avoid using the ?method=xxxx.
>>>>>>>>>>> But I am interested in fixing why method=xxx
does not work for
>>>>>>>>>>> you.
>>>>>>>>>>>
>>>>>>>>>>> See more here
>>>>>>>>>>> http://camel.apache.org/bean-binding.html
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> 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.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> 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-tp24802648p24813432.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-tp24802648p24822320.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-tp24802648p24823165.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
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> 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
>>> 
>>> 
>> 
>> 
> 
> 

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


Mime
View raw message