How do I resolve this Weblogic intermittent java.lang.LinkageError? What are the steps to understanding what it means and fix it?

10,012

Solution 1

The solution was eventually to update the weblogic-application.xml file of the deployed app

The 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?)

<wls:prefer-application-packages>
  ...
  <wls:package-name>java.xml.rpc.*</wls:package-name>
</wls:prefer-application-packages>

Solution 2

Does this mean that I have 2 versions of java.xml.rpc.Service loaded? Is that so?

Yes.

How can that happen?

It happens when you have two classloaders both loading the same class. In your case, the classloaders are instances of different ClassLoader classes:

    java.net.FactoryURLClassLoader

and

    weblogic.utils.classloaders.ChangeAwareClassLoader

what is the way to resolve it?

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.

Share:
10,012
Eran Medan
Author by

Eran Medan

CTO at arnica.io (I'm hiring!)

Updated on June 04, 2022

Comments

  • Eran Medan
    Eran Medan almost 2 years

    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

    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?

  • Chuck Glenn
    Chuck Glenn over 7 years
    This appears to work only for EAR files and not for WAR files
  • oidualc
    oidualc over 6 years
    True, it works only for EAR files. To make it work on WAR files update weblogic.xml instead of weblogic-application.xml with the same snippet.