Uploaded image for project: 'Maven'
  1. Maven
  2. MNG-908

Context class loader references incorrect realm during plugin execution

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0-beta-1
    • 2.0-beta-2
    • None
    • None
    • WinXP SP2, Java 1.4.2, Maven-2.0-beta-1

    Description

      John Fallows wrote:

      I am currently developing a custom maven2 plugin that needs to parse
      some xml files (using xmlbeans). Therefore I used the m2 xmlbeans
      plugin at mojo.codehaus.org to generate the Java code for 3 different
      schema namespaces.

      Unit tests within the plugin verify that this code has been generated
      correctly and works as expected.

      However, when another m2 project attempts to use the custom plugin,
      not all the parsed xml data structures are strongly typed Java
      Objects. Instead, some are just simple XmlObjects, as though no type
      information was generated.

      It seems as though some of the type information cannot be located by
      the xmlbeans runtime when executed through a maven2 plugin. Could the
      classworlds classloader be somehow preventing xmlbeans from seeing all
      the type information?

      John Fallows wrote:

      Ok, so i've done some more digging and it appears to be a classloader
      problem in M2 rather than anything xmlbeans-specific.

      The reason that some of the xmlbeans type information is not available
      is that a call to
      contextClassLoader.getResourceAsStream("some-generated-xmlbeans-resource")
      is returning null when it should be returning non-null.

      However, the class loader of the CustomMojo.class itself does return a
      non-null stream as desired.

      So, I have worked around this by doing the following in CustomMojo:

      public void execute() throws MojoExecutionException
      {
      ClassLoader ccl = Thread.currentThread().getContextClassLoader();
      try

      { Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); ... other Mojo code that calls XmlBeans here ... }

      finally

      { Thread.currentThread().setContextClassLoader(ccl); }

      }

      Is this something that could be managed by the M2 runtime instead?

      Attachments

        Activity

          People

            kenneyw kenneyw
            john.fallows John Fallows
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: