You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2017/03/13 21:31:16 UTC
svn commit: r1786813 - in
/openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src:
main/java/org/apache/webbeans/arquillian/standalone/OwbSWClassLoader.java
test/java/org/apache/webbeans/arquillian/test/OwbArquillianWebJarDeploymentTest.java
Author: struberg
Date: Mon Mar 13 21:31:16 2017
New Revision: 1786813
URL: http://svn.apache.org/viewvc?rev=1786813&view=rev
Log:
OWB-1172 fix WebArchive handling in the OWB-Arquillian adapter
Before that getResources() did not find anything in jars inside WEB-INF/lib/*.jar
Modified:
openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/main/java/org/apache/webbeans/arquillian/standalone/OwbSWClassLoader.java
openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/test/java/org/apache/webbeans/arquillian/test/OwbArquillianWebJarDeploymentTest.java
Modified: openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/main/java/org/apache/webbeans/arquillian/standalone/OwbSWClassLoader.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/main/java/org/apache/webbeans/arquillian/standalone/OwbSWClassLoader.java?rev=1786813&r1=1786812&r2=1786813&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/main/java/org/apache/webbeans/arquillian/standalone/OwbSWClassLoader.java (original)
+++ openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/main/java/org/apache/webbeans/arquillian/standalone/OwbSWClassLoader.java Mon Mar 13 21:31:16 2017
@@ -21,8 +21,11 @@ package org.apache.webbeans.arquillian.s
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.Filters;
import org.jboss.shrinkwrap.api.Node;
+import org.jboss.shrinkwrap.api.asset.ArchiveAsset;
import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import java.io.Closeable;
@@ -38,7 +41,10 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
public class OwbSWClassLoader extends URLClassLoader implements Closeable
{
@@ -128,12 +134,12 @@ public class OwbSWClassLoader extends UR
@Override
public URL findResource(final String name)
{
- final Node node = findNode(name);
- if (node != null)
+ Set<String> nodes = findNodes(archive, name);
+ if (!nodes.isEmpty())
{
try
{
- return new URL(null, "archive:" + archive.getName() + "/" + name, new ArchiveStreamHandler());
+ return new URL(null, "archive:" + nodes.iterator().next());
}
catch (final MalformedURLException e)
{
@@ -150,31 +156,65 @@ public class OwbSWClassLoader extends UR
@Override
public Enumeration<URL> findResources(final String name) throws IOException
{
- final Node node = findNode(name);
- if (node != null)
+ final Set<String> nodes = findNodes(archive, name);
+ List<URL> urls = new ArrayList<>(nodes.size());
+ for (String node : nodes)
{
- return Collections.enumeration(Collections.singleton(new URL(null, "archive:" + archive.getName() + "/" + name, new ArchiveStreamHandler())));
+ urls.add(new URL(null, "archive:" + node, new ArchiveStreamHandler()));
}
- if (useOnlyArchiveResources)
+
+ if (!useOnlyArchiveResources)
{
- return EMPTY_ENUMERATION;
+ Enumeration<URL> parentResources = getParent().getResources(name);
+ while (parentResources.hasMoreElements())
+ {
+ urls.add(parentResources.nextElement());
+ }
}
- return super.findResources(name);
+ return Collections.enumeration(urls);
}
- private Node findNode(final String name)
+ private Set<String> findNodes(Archive arch, final String name)
{
- ArchivePath path = ArchivePaths.create(path(prefix, name));
- Node node = archive.get(path);
- if (node == null)
+ Set<String> nodes = new HashSet<>();
+
+ if (arch instanceof WebArchive)
{
- path = ArchivePaths.create(name);
- node = archive.get(path);
+ // first check WEB-INF/classes
+ ArchivePath path = ArchivePaths.create(path(prefix, name));
+ Node node = arch.get(path);
+ if (node != null)
+ {
+ nodes.add(path.get());
+ }
+ Map<ArchivePath, Node> jarLibs = ((WebArchive) arch).getContent(Filters.include("/WEB-INF/lib/.*\\.jar"));
+ for (Node jarLib : jarLibs.values())
+ {
+ if (jarLib.getAsset() instanceof ArchiveAsset && ((ArchiveAsset) jarLib.getAsset()).getArchive() instanceof JavaArchive)
+ {
+ Set<String> jarNodes = findNodes(((ArchiveAsset) jarLib.getAsset()).getArchive(), name);
+ for (String jarNode : jarNodes)
+ {
+ path = ArchivePaths.create(path("WEB-INF/lib", ((ArchiveAsset) jarLib.getAsset()).getArchive().getName(), jarNode));
+ nodes.add(path.get());
+ }
+ }
+ }
}
- return node;
+ else
+ {
+ ArchivePath path = ArchivePaths.create(name);
+ Node node = arch.get(path);
+ if (node != null)
+ {
+ nodes.add(path.get());
+ }
+ }
+
+ return nodes;
}
private String path(final String... parts)
Modified: openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/test/java/org/apache/webbeans/arquillian/test/OwbArquillianWebJarDeploymentTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/test/java/org/apache/webbeans/arquillian/test/OwbArquillianWebJarDeploymentTest.java?rev=1786813&r1=1786812&r2=1786813&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/test/java/org/apache/webbeans/arquillian/test/OwbArquillianWebJarDeploymentTest.java (original)
+++ openwebbeans/trunk/webbeans-arquillian/owb-arquillian-standalone/src/test/java/org/apache/webbeans/arquillian/test/OwbArquillianWebJarDeploymentTest.java Mon Mar 13 21:31:16 2017
@@ -18,6 +18,14 @@
*/
package org.apache.webbeans.arquillian.test;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+
import javax.inject.Inject;
import org.apache.webbeans.arquillian.test.beans.SampleUser;
@@ -26,6 +34,7 @@ import org.jboss.arquillian.junit.Arquil
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
@@ -39,6 +48,7 @@ import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class OwbArquillianWebJarDeploymentTest
{
+ private static final String RESOURCE_NAME = "some/resource.properties";
@Inject
private SampleUser sampleUser;
@@ -47,27 +57,47 @@ public class OwbArquillianWebJarDeployme
@Deployment
public static Archive deploy()
{
- JavaArchive testJar = ShrinkWrap
- .create(JavaArchive.class, "sampleUserTest.jar")
+ JavaArchive testJar1 = ShrinkWrap
+ .create(JavaArchive.class, "sampleUserTest1.jar")
.addClass(OwbArquillianWebJarDeploymentTest.class)
.addPackage(SampleUser.class.getPackage())
+ .addAsResource(new StringAsset("hello1"), RESOURCE_NAME)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+ JavaArchive testJar2 = ShrinkWrap
+ .create(JavaArchive.class, "sampleUserTest2.jar")
+ .addAsResource(new StringAsset("hello2"), RESOURCE_NAME);
+
WebArchive testWar = ShrinkWrap
.create(WebArchive.class, "sampleUserTest.war")
- .addAsLibrary(testJar);
+ .addAsResource(new StringAsset("hello3"), RESOURCE_NAME)
+ .addAsLibrary(testJar1)
+ .addAsLibrary(testJar2);
return testWar;
}
@Test
- public void testOwbArqContainerStartup()
- {
+ public void testOwbArqContainerStartup() throws IOException {
Assert.assertNotNull(sampleUser);
Assert.assertEquals("Hans", sampleUser.getFirstName());
sampleUser.setFirstName("Karl");
Assert.assertEquals("Karl", sampleUser.getFirstName());
+
+ Enumeration<URL> resources = Thread.currentThread().getContextClassLoader().getResources(RESOURCE_NAME);
+ Set<String> contents = new HashSet<>();
+
+ while (resources.hasMoreElements())
+ {
+ URL url = resources.nextElement();
+ contents.add(new BufferedReader(new InputStreamReader(url.openStream())).readLine());
+ }
+
+ Assert.assertEquals(3, contents.size());
+ Assert.assertTrue(contents.contains("hello1"));
+ Assert.assertTrue(contents.contains("hello2"));
+ Assert.assertTrue(contents.contains("hello3"));
}
}