JJ or Clause, can you help understand this use case?
Are you trying to have a client PUSH a message to the server via http, that
is just trying to start a message on its route?


---
Thank You…

Mick Knutson, President

BASE Logic, Inc.
Enterprise Architecture, Design, Mentoring & Agile Consulting
p. (866) BLiNC-411: (254-6241-1)
f. (415) 685-4233

Website: http://baselogic.com
Linked IN: http://linkedin.com/in/mickknutson
Vacation Rental: http://tahoe.baselogic.com
---



On Wed, Aug 5, 2009 at 7:55 AM, Claus Ibsen <claus.ib...@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.ib...@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_burf...@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_burf...@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_burf...@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_burf...@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_burf...@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
>

Reply via email to