[
https://issues.apache.org/jira/browse/CXF-8603?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17425204#comment-17425204
]
Archie Patrick commented on CXF-8603:
-------------------------------------
Hello Freeman,
I'm not sure adding an "NPE guard" would solve the problem. Since the
ClassLoaderHolder.setThreadContextClassLoader() method always returns the saved
CCL in a ClassLoaderHolder, all callers of the setThreadContextClassLoader()
are probably expecting a valid CCL to be returned. Or, did you mean to add
something like:
{code:java}
public static ClassLoaderHolder setThreadContextClassloader(final
ClassLoader newLoader) {
...
...
final ClassLoader l = thread.getContextClassLoader();
try {
thread.setContextClassLoader(newLoader);
}
catch( Throwable t ) {
//ignore it?? fail quietly?
}
return new ClassLoaderHolder(l, thread);
...
...{code}
> ClassLoaderUtils.setThreadContextClassloader attempts to set null class loader
> ------------------------------------------------------------------------------
>
> Key: CXF-8603
> URL: https://issues.apache.org/jira/browse/CXF-8603
> Project: CXF
> Issue Type: Bug
> Affects Versions: 3.3.11
> Reporter: Archie Patrick
> Priority: Major
>
> Created a custom connector for a SOAP Service using CXF for Oracle Identity
> Manager using their Identity Connector Framework (ICF). Their framework has
> a Context Class Loader "watcher" that detects that the
> ClassLoaderUtils.setThreadContextClassLoader() method is attempting to set a
> "null" loader. This happens when a call is made to invoke a SOAP message:
> public void testService() {
> try {
> IPersonnelManagement2014 port = getPersonnelManagementPort2014();
> PersonnelManagementViewUser2Response response =
> port.viewUser("xxxxx", "external", null, null, null, null);
>
> See stacktrace below:
> SEVERE: Attempting to set the CCL of thread 'pool-1-thread-9' to nullSEVERE:
> Attempting to set the CCL of thread 'pool-1-thread-9' to
> nulljava.lang.Throwable at
> org.identityconnectors.framework.server.impl.CCLWatchThread.setContextClassLoader(CCLWatchThread.java:59)
> at
> org.apache.cxf.common.classloader.ClassLoaderUtils.setThreadContextClassloader(ClassLoaderUtils.java:70)
> at org.apache.cxf.helpers.XPathUtils.getValue(XPathUtils.java:73) at
> org.apache.cxf.interceptor.ClientFaultConverter.setStackTrace(ClientFaultConverter.java:245)
> at
> org.apache.cxf.interceptor.ClientFaultConverter.handleMessage(ClientFaultConverter.java:84)
> at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
> at
> org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:112)
> at
> org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:137)
> at
> org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:70)
> at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
> at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:829) at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1696)
> at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1570)
> at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1371)
> at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
> at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671) at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
> at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
> at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:441) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:356) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:314) at
> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) at
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140) at
> com.sun.proxy.$Proxy40.viewUser(Unknown Source) at
> com.icsynergy.epic.wsclient.WSClient.testService(WSClient.java:550)
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)