Uploaded image for project: 'ShrinkWrap'
  1. ShrinkWrap
  2. SHRINKWRAP-516

ContainerBase.addPackages() fails with IllegalArgumentException from ClassLoaderAsset

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Major
    • None
    • 1.2.4
    • impl-base
    • None

    Description

      In my current JBoss EAP 6.4 project I tried to update Arquillian from 1.1.11 to 1.1.13 which fails with:

      Caused by: java.lang.IllegalArgumentException: /com/some_company/some_project/some_package/SomeClass.class not found in classloader sun.misc.Launcher$AppClassLoader@6bc7c054
              at org.jboss.shrinkwrap.api.asset.ClassLoaderAsset.<init>(ClassLoaderAsset.java:70)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.foundClass(URLPackageScanner.java:165)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:157)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:159)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:159)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:159)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:159)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:159)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:159)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:159)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(URLPackageScanner.java:145)
              at org.jboss.shrinkwrap.impl.base.URLPackageScanner.scanPackage(URLPackageScanner.java:113)
              at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addPackage(ContainerBase.java:1520)
              at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addPackages(ContainerBase.java:1485)
              at ...
      

      Arquillian 1.1.13 brings in Shrinkwrap 1.2.6 (we are on 1.2.3 with Arquillian 1.1.11).

      After extensive research and debugging I am almost 100% sure that this is a regression caused by this commit (SHRINKWRAP-505):
      https://github.com/shrinkwrap/shrinkwrap/commit/d0df4ba3fd12998388521219e724c3964428a28a

      The root cause of the problem lies within the else block of org.jboss.shrinkwrap.impl.base.URLPackageScanner.handle(File, String):

          private void handle(File file, String packageName) throws ClassNotFoundException {
              for (File child : file.listFiles()) {
                  if (!child.isDirectory() && child.getName().endsWith(SUFFIX_CLASS)) {
                      final String packagePrefix = packageName.length() > 0 ? packageName + "." : packageName;
                      String className = packagePrefix + child.getName().substring(0, child.getName().lastIndexOf(SUFFIX_CLASS));
                      foundClass(className, prefix + className.replace( '.', '/' ) + SUFFIX_CLASS );
                  } else if (child.isDirectory() && addRecursively) {
                      handle(child, packageName + "." + child.getName());
                  }
              }
          }
      

      The first handle() invocation has an empty packageName and when the else block kicks in, handle() is called recursively with with e.g. ".com" which is a malformed package name.

      While SHRINKWRAP-505 did not touch this else block it did remove a crucial .substring(1) call, see:
      https://github.com/shrinkwrap/shrinkwrap/commit/d0df4ba3fd12998388521219e724c3964428a28a#diff-68209d76d20ce7a8aef1913712645af9R1514

      Suggested solution: Don't prepend a dot in case packageName is empty.

      Note: SHRINKWRAP-515 should be resolved alongside this fix as one of the affected tests was introduced in SHRINKWRAP-505.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              falko.modler@t-systems.com Falko Modler (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated: