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: [email protected]
For additional commands, e-mail: [email protected]