I have an intermittent linkage error thrown: (That's basically all the information I have)
java.lang.LinkageError loader constraint violation:
when resolving field 'service' of the class loader instance of
java/net/FactoryURLClassLoader) of the referring class
org/apache/axis/client/Stub, and the class loader (instance of
weblogic/utils/classloaders/ChangeAwareClassLoader)
for the field's resolved type, java/xml/rpc/Service,
have different class objects for that type
Or in a more readable way
Exception: java.lang.LinkageError
- field:
service
- CL instance:
java.net.FactoryURLClassLoader
- reffering class:
org.apache.axis.client.Stub
- 2nd CL instance:
weblogic.utils.classloaders.ChangeAwareClassLoader
- field's resolve type:
java.xml.rpc.Service
- field:
Does this mean that I have 2 versions of java.xml.rpc.Service loaded? Is that so? How can that happen? what is the way to resolve it?
The solution was eventually to update the
weblogic-application.xml
file of the deployed appThe application used an old
jaxrpc-api.jar
that we could not remove for various reason,The solution we used to prefer the internal jar was this (Is there a better way?)
Yes.
It happens when you have two classloaders both loading the same class. In your case, the classloaders are instances of different ClassLoader classes:
and
I'm not a Weblogic user, but the theoretical solution is to put the JAR file containing the classes in question into the classpath of an common ancestor classloader of the two above.