Class Loading Issues

It is possible that the Java libraries you have specified in the plugin libraries list conflict with the ones already loaded by Oxygen XML Developer . In order to instruct the plugin to prefer its libraries over the ones used by Oxygen XML Developer , you can add the following attribute on the <plugin> root element:classLoaderType="preferReferencedResources" from the plugin.xml descriptor.

A Late Delegation Class Loader (the main class loader in Oxygen XML Developer ) is a java.net.URLClassLoader extension which prefers to search classes in its own libraries list and only if a class is not found there to delegate to the parent class loader.

The main Oxygen XML Developer Class Loader uses as libraries all jars specified in the OXYGEN_INSTALL_DIR\lib directory. Its parent class loader is the default JVM Class loader. For each instantiated plugin a separate class loader is created having as parent the Oxygen XML Developer Class Loader.

The plugin class loader can be either a standard java.net.URLClassLoader or a LateDelegationClassLoader (depending on the attribute classLoaderType in the plugin.xml). Its parent class loader is always the Oxygen XML Developer LateDelegationClassLoader.

If you experience additional problems like the following:
java.lang.LinkageError: ClassCastException: attempting to cast jar:file:/C:/jdk1.6.0_06/jre/lib/rt.jar!/javax/xml/ws/spi/Provider.classtojar:file:/D:/Program
    Files/Oxygen XML Editor
    12/plugins/wspcaccess/../../xdocs/lib/jaxws/jaxws-api.jar!/javax/xml/ws/spi/Provider.class
    at javax.xml.ws.spi.Provider.provider(Provider.java:94) at
    javax.xml.ws.Service.<init>(Service.java:56)
......................................................................
The cause could be the fact that some classes are instantiated using the context class loader of the current thread. The most straightforward fix is to write your code in a try/finally statement:
  ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
  try {
    //This is the implementation of the WorkspaceAccessPluginExtension plugin interface.
    Thread.currentThread().setContextClassLoader(
        CustomWorkspaceAccessPluginExtension.this.getClass().getClassLoader());
    //WRITE YOUR CODE HERE
  } finally {
    Thread.currentThread().setContextClassLoader(oldClassLoader);
  }