Linkage error at IAction runtime
[ Edited ]


Running a custom IAction which calls a SiteScope API method. So I must include the SiteScope API jars (source file attached).

Debugging using the suspend=y option I see that the action crashes at the point where I actually call the SiteScope method (full stack attached):

ERROR [11982507@qtp0-181] (01:37:34,730) com.iconclude.webservices.ras.RCAgentServiceSoapBindingImpl - execute failed for SitescopeAlertsDisable.jar:com/hp/saas/oo/content/sitescope/api/AlertsDisableAssociated.class
INFO   | jvm 1    | 2013/08/18 01:37:34 | java.lang.RuntimeException: error instantiating action class: SitescopeAlertsDisable.jar/com/hp/saas/oo/content/sitescope/api/AlertsDisableAssociated.class, reason: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.apache.axis.message.MessageElement.getChildElements(Ljavax/xml/namespace/QName;)Ljava/util/Iterator;" the class loader (instance of com/iconclude/webservices/ras/ReverseClassLoader) of the current class, org/apache/axis/message/MessageElement, and the class loader (instance of <bootloader>) for interface javax/xml/soap/SOAPElement have different Class objects for the type javax/xml/namespace/QName used in the signature

It seems that this linkage error occurs when a class is loaded by two classloaders who name their instance of it with a different name.

Why are two class loaders at work here?

  • I import the SiteScope API into my class.
  • I don't export the SiteScope API libs themselves. I don't export .classpath (project snapshot attached)
  • I place the SiteScope API jars in the lib/AlertsDisableAssociated directory which I created on the RAS.

So I expect OO to link just once. What am I doing wrong?


David Salkin