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.