[ 
https://issues.apache.org/jira/browse/CXF-6245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Daniel Kulp resolved CXF-6245.
------------------------------
       Resolution: Fixed
    Fix Version/s: 2.7.15
                   3.0.4
         Assignee: Daniel Kulp

> Loading non-existent class org.apache.cxf.xmlbeans.XmlBeansWrapperHelper in 
> WrapperClassOutInterceptor is causing performance issues
> ------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-6245
>                 URL: https://issues.apache.org/jira/browse/CXF-6245
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime
>    Affects Versions: 2.7.12
>            Reporter: Edwin
>            Assignee: Daniel Kulp
>             Fix For: 3.0.4, 2.7.15
>
>
> We have an application with quite a few jars in the classpath.  Since the 
> class org.apache.cxf.xmlbeans.XmlBeansWrapperHelper doesn't exist, the 
> loading of this class causes the class loader to search the entire classpath 
> which means scanning each and every jar.  This is causing performance issues 
> for us where under heavy load several threads get blocked while one thread is 
> searching all the jars in the classpath.  
> Here is the thread which is searching the classpath:
>    java.lang.Thread.State: RUNNABLE
>         at java.util.zip.ZipFile.getEntry(Native Method)
>         at java.util.zip.ZipFile.getEntry(ZipFile.java:306)
>         - locked <0x000000074069ee30> (a java.util.jar.JarFile)
>         at java.util.jar.JarFile.getEntry(JarFile.java:226)
>         at 
> weblogic.utils.classloaders.ZipClassFinder.getSource(ZipClassFinder.java:39)
>         at 
> weblogic.utils.classloaders.JarClassFinder.getSource(JarClassFinder.java:50)
>         at 
> weblogic.utils.classloaders.AbstractClassFinder.getClassSource(AbstractClassFinder.java:31)
>         at 
> weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:59)
>         at 
> weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:59)
>         at 
> weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:59)
>         at 
> weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:59)
>         at 
> weblogic.application.utils.CompositeWebAppFinder.getClassSource(CompositeWebAppFinder.java:88)
>         at 
> weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:59)
>         at 
> weblogic.utils.classloaders.MultiClassFinder.getClassSource(MultiClassFinder.java:59)
>         at 
> weblogic.utils.classloaders.CodeGenClassFinder.getClassSource(CodeGenClassFinder.java:28)
>         at 
> weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:329)
>         - locked <0x0000000740a46f30> (a 
> weblogic.utils.classloaders.ChangeAwareClassLoader)
>         at 
> weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:302)
>         at 
> weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
>         - locked <0x0000000740a46f30> (a 
> weblogic.utils.classloaders.ChangeAwareClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
>         at 
> weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:180)
>         at 
> weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:190)
>         at 
> org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage(WrapperClassOutInterceptor.java:91)
> at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> and here are two of the many blocked threads:
> "[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default 
> (self-tuning)'" daemon prio=10 tid=0x000000001a357800 nid=0x189a waiting for 
> monitor entry [0x00002b7d60ef1000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
>         - waiting to lock <0x0000000740a46f30> (a 
> weblogic.utils.classloaders.ChangeAwareClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
>         at 
> weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:180)
>         at 
> weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:43)
>         at 
> com.sun.org.apache.xerces.internal.utils.ObjectFactory.findProviderClass(ObjectFactory.java:322)
>         at 
> com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:270)
>         at 
> com.sun.org.apache.xerces.internal.utils.ObjectFactory.newInstance(ObjectFactory.java:256)
>         at 
> com.sun.org.apache.xerces.internal.impl.dv.DTDDVFactory.getInstance(DTDDVFactory.java:63)
>         at 
> com.sun.org.apache.xerces.internal.impl.dv.DTDDVFactory.getInstance(DTDDVFactory.java:49)
>         at 
> com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.<init>(SchemaParsingConfig.java:358)
>         at 
> com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.<init>(SchemaParsingConfig.java:255)
>         at 
> com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.<init>(XSDHandler.java:475)
>         at 
> com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.<init>(XSDHandler.java:482)
>         at 
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.<init>(XMLSchemaLoader.java:362)
>         at 
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.<init>(XMLSchemaLoader.java:311)
>         at 
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.<init>(XMLSchemaValidator.java:1144)
>         at 
> com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaValidatorComponentManager.<init>(XMLSchemaValidatorComponentManager.java:214)
>         at 
> com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.<init>(ValidatorHandlerImpl.java:194)
>         at 
> com.sun.org.apache.xerces.internal.jaxp.validation.AbstractXMLSchema.newValidatorHandler(AbstractXMLSchema.java:70)
>         at 
> com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:292)
>         at 
> com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:172)
>         at 
> org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder.java:610)
>         at 
> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:240)
>         at 
> org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:221)
>         at 
> org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writeParts(AbstractOutDatabindingInterceptor.java:140)
> "[ACTIVE] ExecuteThread: '21' for queue: 'weblogic.kernel.Default 
> (self-tuning)'" daemon prio=10 tid=0x000000001b424800 nid=0x18b7 waiting for 
> monitor entry [0x00002b7d62597000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:190)
>         at 
> org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage(WrapperClassOutInterceptor.java:91)
>         at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> We are using CXF 2.7.12 but I believe this issue also exists in 2.7.13 and 
> 2.7.14.  I am also sorry that I can't provide an test to reproduce this as 
> this is a load related issue.
> Is it possible to update the code in WrapperClassOutInterceptor which is 
> trying to load the non-existent class 
> org.apache.cxf.xmlbeans.XmlBeansWrapperHelper?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to