TransformerFactory.newInstance() returns the same instance twice
----------------------------------------------------------------

                 Key: XALANJ-2538
                 URL: https://issues.apache.org/jira/browse/XALANJ-2538
             Project: XalanJ2
          Issue Type: Bug
      Security Level: No security risk; visible to anyone (Ordinary problems in 
Xalan projects.  Anybody can view the issue.)
            Reporter: Daniel Doubleday
            Priority: Minor


We had very strange classloader errors in our webapp when using xalan. (linkage 
error. classloader tried to load class twice)

{noformat}
java.lang.LinkageError: loader (instance of  
org/apache/catalina/loader/WebappClassLoader): attempted  duplicate class 
definition for name: "org/apache/xml/serializer/ToXMLStream"
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at 
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:905)
        at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
        at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
        at 
org.apache.xml.serializer.ObjectFactory.findProviderClass(ObjectFactory.java:505)
        at 
org.apache.xml.serializer.SerializerFactory.getSerializer(SerializerFactory.java:127)
        at 
org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:259)
        at 
org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:329)
        at com.jamesmurty.utils.XMLBuilder.toWriter(XMLBuilder.java:667)
        at com.jamesmurty.utils.XMLBuilder.asString(XMLBuilder.java:690)
        at com.jamesmurty.utils.XMLBuilder.asString(XMLBuilder.java:706)
        at 
org.jets3t.service.acl.AccessControlList.toXml(AccessControlList.java:210)
        at 
org.jets3t.service.impl.rest.httpclient.RestStorageService.putAclImpl(RestStorageService.java:1441)
        at 
org.jets3t.service.impl.rest.httpclient.RestStorageService.createObjectImpl(RestStorageService.java:1636)
        at 
org.jets3t.service.impl.rest.httpclient.RestStorageService.pubObjectWithRequestEntityImpl(RestStorageService.java:1540)
        at 
org.jets3t.service.impl.rest.httpclient.RestStorageService.putObjectImpl(RestStorageService.java:1527)
        at org.jets3t.service.StorageService.putObject(StorageService.java:800)
        at 
org.jets3t.service.multi.ThreadedStorageService$CreateObjectRunnable.run(ThreadedStorageService.java:1332)
        at java.lang.Thread.run(Thread.java:662)
{noformat}

When diving deeper we found this strange behaviour:

{noformat}

    public static void main(String[] args) throws Exception {

        Runnable loader = new Runnable() {
            @Override
            public void run() {
                System.out.println(TransformerFactory.newInstance());
            }
        };

        Thread thread = new Thread(loader);
        Thread thread2 = new Thread(loader);
        
        thread.start();
        thread2.start();
    }
{noformat}

would occasionally print out: (in most cases two different instances were 
returned)

{noformat}
org.apache.xalan.processor.TransformerFactoryImpl@5cac6a45
org.apache.xalan.processor.TransformerFactoryImpl@5cac6a45
{noformat}

this is on

java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode) 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-dev-unsubscr...@xml.apache.org
For additional commands, e-mail: xalan-dev-h...@xml.apache.org

Reply via email to