[ 
https://issues.apache.org/jira/browse/CXF-2620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12801952#action_12801952
 ] 

William (BJ) Blackburn commented on CXF-2620:
---------------------------------------------

Please forgive this piecemeal narrative. It now appears that something could be 
done in CXFServlet to insulate against this issue. I have discovered that the 
problem is with the implementation of 'onApplicationEvent' in CXFServlet. 

I added some tracing to this code. Under Spring 2.5.6 - I saw no evidence that 
this method was ever called at all. When running under Spring 3.0 this method 
was called multiple times - the first call happening BEFORE  servletConfig was 
actually available, and subsequently two more times, resulting in unnecessary 
context updates that resulted in this information log entry:

    INFO: Servlet transport factory already registered

It seems that at minimum, the execution of updateContext should only happen if 
the ServletConfig is non-null. It also appears that the use of the 'inRefresh' 
flag is insufficient to guard against rapid fire repeat events as seem to be 
raised in Spring 3.0.

> CXFServlet fails to init with NPE at line 125 (updateContext) when run with 
> embedded Jetty and Spring3 - works with Spring 2.5.6
> --------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-2620
>                 URL: https://issues.apache.org/jira/browse/CXF-2620
>             Project: CXF
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: 2.2.5
>         Environment: Spring 3.0.0.RELEASE / Jetty 6.1.8 (embedded)
>            Reporter: William (BJ) Blackburn
>         Attachments: embedded-jetty-tests.zip
>
>
> I have been using CXF 2.2.3 (also tested with 2.2.5) with Spring 2.5.6 and an 
> embedded Jetty instance successfully for several months. After the release of 
> Spring 3.0, I have tried migrating to the new Spring version. Now the CXF 
> Servlet is failing with a nullpointerexception on the 'updateContext' method:
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.cxf.transport.servlet.CXFServlet.updateContext(CXFServlet.java:125)
>       at 
> org.apache.cxf.transport.servlet.CXFServlet.onApplicationEvent(CXFServlet.java:182)
>       at 
> org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)
>       at 
> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:294)
>       at 
> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:296)
>       at 
> org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:858)
>       at 
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:419)
> The line that is failing is:
>    resourceManager.addResourceResolver(new 
> ServletContextResourceResolver(servletConfig.getServletContext()));
> I can only reproduce this issue using an 'embedded' jetty instance, I have 
> attached a test case. By switching between spring 2.5.6 and spring 3.0, you 
> can see from the log output that the servlet successfully initialized under 
> 2.5.6, but fails under 3.0.
> I understand this may be a very narrow case involving only this method of 
> loading the servlet, so if no fix is required in CXF, some advice as to a 
> workaround would be very welcome. Thank you.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to