https://bz.apache.org/bugzilla/show_bug.cgi?id=68721
Bug ID: 68721
Summary: WebappClassLoaderBase fails with duplicate class
definition
Product: Tomcat 10
Version: 10.1.18
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Catalina
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ------
Created attachment 39612
--> https://bz.apache.org/bugzilla/attachment.cgi?id=39612&action=edit
reproducer web application
I PROVIDED A SAMLE REPRODUCER WEB APPLICATION:
Simply unzip and run it. Additionally, I have provided more detailed
descriptions and explanations in the "HELP.md" file.
**************************************************************************************
DESCRIPTION OF THE BUG:
Some implementations of ClassFileTransformer may lead to WebappClassLoaderBase
performing duplicate class definitions.
If a ClassFileTransformer triggers the loading of a class that is currently in
the process of being loaded by WebappClassLoaderBase, it leads to the following
error:
"
java.lang.LinkageError: loader
org.apache.catalina.loader.ParallelWebappClassLoader @1d562d1a attempted
duplicate class definition for reproducer.webappclassloaderbug.SomeClass."
The chain of execution looks like this:
loadClass (SomeClass) ->
findClassInternal (SomeClass) ->
transform (SomeClass) ->
loadClass (SomeClass) ->
findClassInternal (SomeClass) ->
defineClass (SomeClass)
The issue arises when SomeClass is defined during the innermost (second)
invocation of the findClassInternal method. Upon returning to the outermost
(first) call of findClassInternal within this method, another invocation of
defineClass occurs, resulting in an error. Ideally, this attempt to duplicate
class definition should be avoided, as the class is already defined.
**************************************************************************************
REAL-WORLD EXAMPLE:
This error happened in a real-world application. In this case the
ClassFileTransformer (or rather code excecuted inside the transformer) is the
eclipse link load time weaver
(org.eclipse.persistence.internal.jpa.weaving.PersistenceWeaver). The
conditions for triggering this bug are intricate. If needed, I can furnish
additional details about it.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]