There is something strange. I receive a NPE exception at the line
where I create an exchange from consumer :

        @EndpointInject(name = "queueReportingEndpoint")
        private Endpoint endpoint;
        
        private ConsumerTemplate consumer;
        
        public List<Map<String, Object>> collectMessages() {
        
        Log.info("Endpoint : " + endpoint.getEndpointUri());
        
        Exchange exch = consumer.receive(endpoint);

If I call directly consumer.receiveBody(endpoint, List.class); I have
the same error. I tough that the problem come from the endpoint
injection, but I have also a NPE if I use the uri of the endpoint in
the receiveBody method

Here is the trace :

Time=Mon Sep 21 15:00:00 CEST 2009, calendar=null,
previousFireTime=Mon Sep 21 14:58:00 CEST 2009,
CamelBeanMethodName=null}, BodyType:org.quartz.JobDetail,
Body:JobDetail 
'DEFAULT.quartz://x3sReporting/clientError?cron=0+0%2F2+9-18+%3F+*+MON-FRI':
 jobClass: 'org.apache.camel.component.quartz.CamelJob isStateful:
false isVolatile: false isDurable: false requestsRecovers: false
15:00:00,000 | INFO  | heduler_Worker-2 | x3s
    | rg.apache.camel.processor.Logger   88 | Exchange[
, BodyType:org.quartz.JobDetail
, Body:JobDetail
'DEFAULT.quartz://x3sReporting/clientError?cron=0+0%2F2+9-18+%3F+*+MON-FRI':
 jobClass: 'org.apache.camel.component.quartz.CamelJob isStateful:
false isVolatile: false isDurable: false requestsRecovers: false
, CaughtExceptionType:java.lang.NullPointerException,
CaughtExceptionMessage:null, StackTrace:java.lang.NullPointerException
        at 
com.xpectis.x3s.core.util.ReportingConsumer.collectMessages(ReportingConsumer.java:27)


Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com



On Mon, Sep 21, 2009 at 2:12 PM, Claus Ibsen <[email protected]> wrote:
> On Mon, Sep 21, 2009 at 2:05 PM, Charles Moulliard <[email protected]> 
> wrote:
>> @EndpointInject(uri="") only accepts as parameter an uri / name or
>> context but not a reference to a spring bean
>>
>
> Its the name attribute that is the ref, maybe we should rename it :)
>
>
>
>> Charles Moulliard
>> Senior Enterprise Architect
>> Apache Camel Committer
>>
>> *****************************
>> blog : http://cmoulliard.blogspot.com
>>
>>
>>
>> On Mon, Sep 21, 2009 at 1:59 PM, Claus Ibsen <[email protected]> wrote:
>>> On Mon, Sep 21, 2009 at 1:55 PM, Charles Moulliard <[email protected]> 
>>> wrote:
>>>> Sorry for my mistake.
>>>>
>>>> I have used @consume because it was possible to pass as a parameter
>>>> the name of the endpoint to consume. Is there a way to do this with a
>>>> consumer template ?
>>>>
>>>
>>> You can IoC the endpoint in the bean
>>>
>>> @EndpointInjected(ref = "foo")
>>> private Endpoint foo;
>>>
>>> but I would assume consumer template also works like producer template with 
>>> IoC
>>> ( if not we should add it)
>>>
>>> @EndpointInjected(ref = "foo")
>>> private ConsumerTemplate consumer;
>>>
>>>
>>> See more
>>> http://camel.apache.org/bean-injection.html
>>>
>>>> regards,
>>>>
>>>> Charles Moulliard
>>>> Senior Enterprise Architect
>>>> Apache Camel Committer
>>>>
>>>> *****************************
>>>> blog : http://cmoulliard.blogspot.com
>>>>
>>>>
>>>>
>>>> On Mon, Sep 21, 2009 at 1:50 PM, Claus Ibsen <[email protected]> wrote:
>>>>> On Mon, Sep 21, 2009 at 1:46 PM, Charles Moulliard <[email protected]> 
>>>>> wrote:
>>>>>> The POJO defined in the following route consumes immediately messages
>>>>>> posted on a queue and in consequence is not triggered by the Quartz
>>>>>> timer
>>>>>>
>>>>>>                        <camel:from 
>>>>>> uri="quartz://x3sReporting/clientError?cron=0+0/5+9-18+?+*+MON-FRI"/>
>>>>>>                                <camel:doTry>
>>>>>>                                    <camel:bean ref="reportingConsumer" 
>>>>>> method="collectMessages"/>
>>>>>>                                    ...
>>>>>>
>>>>>> public class ReportingConsumer {
>>>>>>
>>>>>>   �...@consume(ref = "queueReportingEndpoint") // = x3s:report queue
>>>>>>        public List<Map<String, Object>> collectMessages(List<Map<String,
>>>>>> Object>> received) {
>>>>>>
>>>>>>        List<Map<String, Object>> result = new ArrayList<Map<String, 
>>>>>> Object>>();
>>>>>>
>>>>>>                if (received != null) {
>>>>>>
>>>>>>                        Log.info("Received exchange : " + 
>>>>>> received.size());
>>>>>>                        for(Map<String, Object> model : received) {
>>>>>>
>>>>>>                                Log.info("Map received : " + 
>>>>>> model.toString());
>>>>>>                                // Add model received into the result 
>>>>>> output list
>>>>>>                                result.add( model );
>>>>>>                        }
>>>>>>                }
>>>>>>
>>>>>>                return result;
>>>>>>        }
>>>>>>
>>>>>> Question : How can I avoid that the bean consumes immediately messages
>>>>>> from the queue and wait quartz triggering ?
>>>>>
>>>>> You cannot as @Consume(ref = "queueReportingEndpoint") has ABSOLUTELY
>>>>> nothing to do with quartz.
>>>>> It creates a new event driven consumer which listen on new messages
>>>>> arriving on that JMS queue.
>>>>>
>>>>> You can remove the @Consume and then let quartz invoke it from the Camel 
>>>>> route.
>>>>>
>>>>> And then you can in your bean use a consumer template to read messages
>>>>> from the JMS queue.
>>>>> Now you bean is only invoked when quartz triggers.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> Charles Moulliard
>>>>>> Senior Enterprise Architect
>>>>>> Apache Camel Committer
>>>>>>
>>>>>> *****************************
>>>>>> blog : http://cmoulliard.blogspot.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
>

Reply via email to