cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thorsten Scherler <scher...@gmail.com>
Subject Re: [c3] CallStack.getCurrentFrame() returns null - why?
Date Tue, 13 Mar 2012 13:45:34 GMT
On 03/13/2012 01:22 PM, Thorsten Scherler wrote:
> Hi all,
>
> as I mentioned in another thread I am ATM extracting various code from 
> our main c3 block into separate ones. The extraction works fine for 
> i18n and some general pipes. However we use a activemq queue and when 
> I try to invoke a java pipeline from within a 
> javax.jms.MessageListener I get a NPE in invoking pipe.execute().
>
> I use something like:
>
> ByteArrayOutputStream baos = new ByteArrayOutputStream();
> Pipeline<SAXPipelineComponent> emailPipe = 
> this.applicationContext.getBean("emailPipe", Pipeline.class);
> emailPipe.setup(baos, parameters);
> emailPipe.execute(); -> here we get NPE
>
> I debugged the whole thing and found out that we never enter in the 
> execute() method of the pipeline because before the 
> CallStackCollectorDataStore.set is called.
>
> public void set(String key, Object value) {
>         CallStack.getCurrentFrame().setAttribute(key, value);
>     }
>
> This provokes the following:
> java.lang.NullPointerException
>     at 
> org.apache.cocoon.servlet.collector.CallStackCollectorDataStore.set(CallStackCollectorDataStore.java:28)
>     at 
> org.apache.cocoon.servlet.collector.ResponseHeaderCollector.setModifiedResponse(ResponseHeaderCollector.java:200)
>     at 
> org.apache.cocoon.servlet.collector.ResponseHeaderCollector.interceptInvoke(ResponseHeaderCollector.java:49)
>
> Now finally I found that CallStack.getCurrentFrame() is NULL,  because 
> in CallStack
> public static CallFrame getCurrentFrame() {
>  final Stack stack = (Stack) callStack.get();
> ...
> the stack is null and then the method is returning null provoking this 
> very ugly NPE (which took me ages to track down).
>
> Now my question is how can it be that the stack is null and how can I 
> prevent it from happening? Further I would strongly vote to refactor 
> CallStack.getCurrentFrame().setAttribute to something like
> CallFrame frame = CallStack.getCurrentFrame();
> if(null!=frame){
>   frame.setAttribute(key, value);
> }else{
>   // should we throw here an exception or is there an alternative?
> }
>
> Any ideas are welcome.

Ok, getting closer to the underlying problem. I did
ServletContext xXx = CallStackHelper.getCurrentServletContext();
and surprise surprise "xXx = null"

...now how can I attach the context to my jms listener again?

salu2

-- 
Thorsten Scherler<scherler.at.gmail.com>
codeBusters S.L. - web based systems
<consulting, training and solutions>

http://www.codebusters.es/


Mime
View raw message