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<[email protected]> 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<[email protected]> 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<[email protected]> 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<[email protected]> 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<[email protected]> 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
