Search code examples
javaexceptionweblogicclassloaderlinkage

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


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?


Solution

  • 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>