cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: NullPointerException at JaxWsDynamicClientFactory.createClient(...) in CXF 2.4.0 - maybe classloader problem
Date Wed, 11 May 2011 14:56:27 GMT
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 <willem.jiang@gmail.com> 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

Mime
View raw message