To closes this up (and for people who find this question by Google): A solution was posted in another thread in this list (http://cxf.547215.n5.nabble.com/Upgrade-to-2-4-NullPointerException-tt4386230.html) and works for me, too. Simply adding
Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); before the creation of the Client solves this. On Thu, May 12, 2011 at 10:54 AM, Sergey Beryozkin <[email protected]> wrote: > I see, I just missed the whole discussion about about classloaders on > the dev list :-) > > On Wed, May 11, 2011 at 3:56 PM, Sergey Beryozkin <[email protected]> > wrote: >> Hi >> >> Should we have a handler there in case of 'null' ? Default it to something ? >> So that users don't have to start changing the client code ? >> >> Sergey >> >> On Wed, May 11, 2011 at 3:49 PM, Willem Jiang <[email protected]> wrote: >>> Hi, >>> >>> You may consider to set the TCCL like this >>> >>> ClassLoader old = Thread.currentThread().getContextClassLoader(); >>> try { >>> >>> Thread.currentThread().setContextClassloader(YourApplicationClassLoader); >>> JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); >>> this.client = dcf.createClient(new URL(wsdlUrl)); >>> } finally { >>> Thread.currentThread().setContextClassLoader(old); >>> } >>> >>> On 5/11/11 10:36 PM, Martin Thurau wrote: >>>> >>>> Hello everyone >>>> >>>> I have code, which calls SOAP services using the dynamic client >>>> feature of Apache CXF. The code basically looks like this: >>>> >>>> JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); >>>> this.client = dcf.createClient(new URL(wsdlUrl)); >>>> >>>> The Exception is thrown within createClient, but only under certain >>>> circumstances. If I run the code within a simple test app everything >>>> runs fine. However, if I move my code to the actual context, as a >>>> plugin within another software, the Exception occurs. The other >>>> software is "Kettle", a tool of the Pentaho BI Suite. I suspect, that >>>> this is because Kettle installs an own classloader in the thread >>>> context and the CXF code that gets executed is somehow incompatible >>>> with this specific classloader. >>>> >>>> Does anyone has a had similar problems when embedding CXF into another >>>> application? What further actions are recommended? >>>> >>>> -- >>>> >>>> I have debugged the NullPointerException within Kettle and have the >>>> exact position where the fault occurs. However, I have no clue *what* >>>> the code inquestion is doing, why it is doing this and what would be a >>>> correct behaviour. >>>> >>>> The NullPointerException is thrown at >>>> org.apache.cxf.wsdl11.WSDLServiceFactory within the constructor >>>> "public WSDLServiceFactory(Bus b, URL url)" at line 67. This line >>>> looks like this: >>>> >>>> definition = >>>> getBus().getExtension(WSDLManager.class).getDefinition(wsdlUrl); >>>> >>>> The NullPointerException occures, because the getExtension method >>>> returns null. At run time, the getBus() method returns an instance of >>>> org.apache.cxf.bus.CXFBusImpl. Its complete getExtension in this class >>>> looks like: >>>> >>>> public final<T> T getExtension(Class<T> extensionType) { >>>> Object obj = extensions.get(extensionType); >>>> if (obj == null) { >>>> ConfiguredBeanLocator loc = >>>> (ConfiguredBeanLocator)extensions.get(ConfiguredBeanLocator.class); >>>> if (loc == null) { >>>> loc = createConfiguredBeanLocator(); >>>> } >>>> if (loc != null) { >>>> //force loading >>>> Collection<?> objs = loc.getBeansOfType(extensionType); >>>> if (objs != null) { >>>> for (Object o : objs) { >>>> extensions.put(extensionType, o); >>>> } >>>> } >>>> obj = extensions.get(extensionType); >>>> } >>>> } >>>> if (null != obj) { >>>> return extensionType.cast(obj); >>>> } >>>> return null; >>>> } >>>> >>>> As you can see, there is a code path that may return null. A case in >>>> which the code at org.apache.cxf.wsdl11.WSDLServiceFactory *will* >>>> fail. In my understanding this is a bug. Am I seeing this right? >>>> >>>> Regards >>>> Martin Thurau >>>> >>> >>> >>> -- >>> Willem >>> ---------------------------------- >>> FuseSource >>> Web: http://www.fusesource.com >>> Blog: http://willemjiang.blogspot.com (English) >>> http://jnn.javaeye.com (Chinese) >>> Twitter: willemjiang >>> >>> Connect at CamelOne May 24-26 >>> The Open Source Integration Conference >>> http://camelone.com >>> >> >> >> >> -- >> Sergey Beryozkin >> >> Application Integration Division of Talend >> http://sberyozkin.blogspot.com >> > > > > -- > Sergey Beryozkin > > Application Integration Division of Talend > http://sberyozkin.blogspot.com > -- Martin Thurau 0176/21131597
