You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Andres Almiray <aa...@yahoo.com.INVALID> on 2017/02/20 14:46:03 UTC

NPE when running on Tomcat8

Hello everyone,

I'm trying to run a simple webservice on Tomcat 8.5.11 with CXF 3.1.10 and have encountered two separate NPEs when CXF attempts to resolve a BusFactory. 

The first one appears at https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/BusFactory.java#L397 apparently cls.getClassLoader() returns null. 

The second one is at https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerImpl.java#L154 where getClass().getClassLoader() also returns null. 

More details at http://stackoverflow.com/questions/42341942/tomcat8-org-apache-cxf-busfactory-getbusfactoryclass-failed-to-determine-busfact

I've build a local version of cxf-core with these two spots patched to handle the NPE and forward the loading to a non-null ClassLoader, such as the ContextClassLoader. 

My question is, am I missing setup on the Tomcat side so that the intended ClassLoader is not null?

Should CXF have additional checks for potential nulls in these two (possibly other) cases?

TIA
Andres

Re: NPE when running on Tomcat8

Posted by Colm O hEigeartaigh <co...@apache.org>.
We might as well merge the NPE fix anyway. Could you submit a PR please?

Colm.

On Tue, Feb 21, 2017 at 7:25 PM, Almiray <aa...@yahoo.com.invalid> wrote:

> The problem occurs if an only if CXF jars are placed under
> $CATALINA_HOME/endorsed.This was a mistake on my part as I w under the
> impression that $CATALINA_HOME/lib should remain pristine. Turns out the
> endorsed directory is used to override classes delivered by the JDK itself.
> Placing CXF libraries under $CATALINA_HOME/lib (for all applications) or at
> WEB-INF/lib (per application) makes it work.
> The patch was simple. Check is getClass().getClassLoader() returned null,
> if so then use the context ClassLoader itself.
> Cheers,Andres -------------------------------------------Java Champion,
> Groovy Enthusiasthttp://jroller.com/aalmirayhttp://www.linkedin.
> com/in/aalmiray--What goes up, must come down. Ask any system
> administrator.There are 10 types of people in the world: Those who
> understand binary, and those who don't.To understand recursion, we must
> first understand recursion.
>
>     On Tuesday, February 21, 2017 4:16 PM, Sergey Beryozkin <
> sberyozkin@gmail.com> wrote:
>
>
>  I haven't seen any issues in running CXF in Tomcat 8, we've had it added
> to the actual war, looks like you put CXF into the common lib folder ?
> If yes, how did you patch it for the given resource be loaded if it is
> 'null', did you delegate to the system loader ?
>
> Thanks, Sergey
> On 20/02/17 14:46, Andres Almiray wrote:
> > Hello everyone,
> >
> > I'm trying to run a simple webservice on Tomcat 8.5.11 with CXF 3.1.10
> and have encountered two separate NPEs when CXF attempts to resolve a
> BusFactory.
> >
> > The first one appears at https://github.com/apache/cxf/
> blob/master/core/src/main/java/org/apache/cxf/BusFactory.java#L397
> apparently cls.getClassLoader() returns null.
> >
> > The second one is at https://github.com/apache/cxf/
> blob/master/core/src/main/java/org/apache/cxf/bus/extension/
> ExtensionManagerImpl.java#L154 where getClass().getClassLoader() also
> returns null.
> >
> > More details at http://stackoverflow.com/questions/42341942/tomcat8-
> org-apache-cxf-busfactory-getbusfactoryclass-failed-to-determine-busfact
> >
> > I've build a local version of cxf-core with these two spots patched to
> handle the NPE and forward the loading to a non-null ClassLoader, such as
> the ContextClassLoader.
> >
> > My question is, am I missing setup on the Tomcat side so that the
> intended ClassLoader is not null?
> >
> > Should CXF have additional checks for potential nulls in these two
> (possibly other) cases?
> >
> > TIA
> > Andres
> >
>
>
>
>




-- 
Colm O hEigeartaigh

Talend Community Coder
http://coders.talend.com

Re: NPE when running on Tomcat8

Posted by Almiray <aa...@yahoo.com.INVALID>.
The problem occurs if an only if CXF jars are placed under $CATALINA_HOME/endorsed.This was a mistake on my part as I w under the impression that $CATALINA_HOME/lib should remain pristine. Turns out the endorsed directory is used to override classes delivered by the JDK itself. Placing CXF libraries under $CATALINA_HOME/lib (for all applications) or at WEB-INF/lib (per application) makes it work.
The patch was simple. Check is getClass().getClassLoader() returned null, if so then use the context ClassLoader itself.
Cheers,AndresĀ -------------------------------------------Java Champion, Groovy Enthusiasthttp://jroller.com/aalmirayhttp://www.linkedin.com/in/aalmiray--What goes up, must come down. Ask any system administrator.There are 10 types of people in the world: Those who understand binary, and those who don't.To understand recursion, we must first understand recursion. 

    On Tuesday, February 21, 2017 4:16 PM, Sergey Beryozkin <sb...@gmail.com> wrote:
 

 I haven't seen any issues in running CXF in Tomcat 8, we've had it added 
to the actual war, looks like you put CXF into the common lib folder ? 
If yes, how did you patch it for the given resource be loaded if it is 
'null', did you delegate to the system loader ?

Thanks, Sergey
On 20/02/17 14:46, Andres Almiray wrote:
> Hello everyone,
>
> I'm trying to run a simple webservice on Tomcat 8.5.11 with CXF 3.1.10 and have encountered two separate NPEs when CXF attempts to resolve a BusFactory.
>
> The first one appears at https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/BusFactory.java#L397 apparently cls.getClassLoader() returns null.
>
> The second one is at https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerImpl.java#L154 where getClass().getClassLoader() also returns null.
>
> More details at http://stackoverflow.com/questions/42341942/tomcat8-org-apache-cxf-busfactory-getbusfactoryclass-failed-to-determine-busfact
>
> I've build a local version of cxf-core with these two spots patched to handle the NPE and forward the loading to a non-null ClassLoader, such as the ContextClassLoader.
>
> My question is, am I missing setup on the Tomcat side so that the intended ClassLoader is not null?
>
> Should CXF have additional checks for potential nulls in these two (possibly other) cases?
>
> TIA
> Andres
>



   

Re: NPE when running on Tomcat8

Posted by Sergey Beryozkin <sb...@gmail.com>.
I haven't seen any issues in running CXF in Tomcat 8, we've had it added 
to the actual war, looks like you put CXF into the common lib folder ? 
If yes, how did you patch it for the given resource be loaded if it is 
'null', did you delegate to the system loader ?

Thanks, Sergey
On 20/02/17 14:46, Andres Almiray wrote:
> Hello everyone,
>
> I'm trying to run a simple webservice on Tomcat 8.5.11 with CXF 3.1.10 and have encountered two separate NPEs when CXF attempts to resolve a BusFactory.
>
> The first one appears at https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/BusFactory.java#L397 apparently cls.getClassLoader() returns null.
>
> The second one is at https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerImpl.java#L154 where getClass().getClassLoader() also returns null.
>
> More details at http://stackoverflow.com/questions/42341942/tomcat8-org-apache-cxf-busfactory-getbusfactoryclass-failed-to-determine-busfact
>
> I've build a local version of cxf-core with these two spots patched to handle the NPE and forward the loading to a non-null ClassLoader, such as the ContextClassLoader.
>
> My question is, am I missing setup on the Tomcat side so that the intended ClassLoader is not null?
>
> Should CXF have additional checks for potential nulls in these two (possibly other) cases?
>
> TIA
> Andres
>