From 306451ae3c0c4a716dc461d77978c591376aa39c Mon Sep 17 00:00:00 2001 From: Mark Struberg Date: Wed, 20 Jun 2012 10:20:09 +0200 Subject: [PATCH] add archive name to the URL path. Otherwise the default URL#equals will not be able to distinguish resources with same name (e.g. META-INF/beans.xml) in different classpath locations. --- .../embedded_1/ShrinkWrapMetaDataDiscovery.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/openwebbeans-embedded-1/src/main/java/org/jboss/arquillian/container/openwebbeans/embedded_1/ShrinkWrapMetaDataDiscovery.java b/openwebbeans-embedded-1/src/main/java/org/jboss/arquillian/container/openwebbeans/embedded_1/ShrinkWrapMetaDataDiscovery.java index e9055d0..0d350bc 100644 --- a/openwebbeans-embedded-1/src/main/java/org/jboss/arquillian/container/openwebbeans/embedded_1/ShrinkWrapMetaDataDiscovery.java +++ b/openwebbeans-embedded-1/src/main/java/org/jboss/arquillian/container/openwebbeans/embedded_1/ShrinkWrapMetaDataDiscovery.java @@ -82,11 +82,11 @@ private void scanArchive(Archive archive) { Map beansXmls; beansXmls = archive.getContent(Filters.include("/WEB-INF/beans.xml")); - beansXmlPresent |= parseBeansXmls(beansXmls); + beansXmlPresent |= parseBeansXmls(archive.getName(), beansXmls); // people might also add the marker file to WEB-INF/classes directly beansXmls = archive.getContent(Filters.include("/WEB-INF/classes/META-INF/beans.xml")); - beansXmlPresent |= parseBeansXmls(beansXmls); + beansXmlPresent |= parseBeansXmls(archive.getName(), beansXmls); if (beansXmlPresent) { @@ -108,7 +108,7 @@ else if (archive instanceof JavaArchive) { Map beansXmls; beansXmls = archive.getContent(Filters.include("/META-INF/beans.xml")); - beansXmlPresent = parseBeansXmls(beansXmls); + beansXmlPresent = parseBeansXmls(archive.getName(), beansXmls); if (beansXmlPresent) { scanArchiveClasses(archive); @@ -139,18 +139,21 @@ private void scanArchiveClasses(Archive archive) /** * Take all given archives and add the bean.xml files to the * ScannerService. + * @param archiveName is needed if multiple archives are used, e.g. in a WebArchive * @param beansXmls * @return true if at least one beans.xml has been parsed. */ - private boolean parseBeansXmls(Map beansXmls) + private boolean parseBeansXmls(String archiveName, Map beansXmls) { boolean beansXmlPresent = false ; for (final Map.Entry entry : beansXmls.entrySet()) { try { + String urlLocation = "archive://" + archiveName + entry.getKey().get(); + addWebBeansXmlLocation( - new URL(null, "archive:/" + entry.getKey().get(), new URLStreamHandler() + new URL(null, urlLocation, new URLStreamHandler() { @Override protected URLConnection openConnection(URL u) throws IOException