You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by se...@apache.org on 2015/06/15 13:18:41 UTC

svn commit: r1685545 - /aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java

Author: sergeyb
Date: Mon Jun 15 11:18:41 2015
New Revision: 1685545

URL: http://svn.apache.org/r1685545
Log:
[ARIES-1334] Updating SimpleNamespaceHandlerSet to manually resolve jar URIs due to URI.resolve failing to resolve correctly

Modified:
    aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java

Modified: aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java?rev=1685545&r1=1685544&r2=1685545&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java (original)
+++ aries/trunk/blueprint/blueprint-noosgi/src/main/java/org/apache/aries/blueprint/container/SimpleNamespaceHandlerSet.java Mon Jun 15 11:18:41 2015
@@ -96,9 +96,20 @@ public class SimpleNamespaceHandlerSet i
                                                    String systemId, String baseURI) {
                         try {
                             if (systemId != null && !URI.create(systemId).isAbsolute()) {
-                                URI namespaceURI = URI.create(namespace);
-                                if (namespaces.containsKey(namespaceURI)) {
-                                    URI systemIdUri = namespaces.get(namespaceURI).toURI().resolve(systemId);
+                                URL namespaceURL = namespaces.get(URI.create(namespace));
+                                if (namespaceURL != null) {
+                                    URI systemIdUri = namespaceURL.toURI().resolve(systemId);
+                                    if (!systemIdUri.isAbsolute() && "jar".equals(namespaceURL.getProtocol())) {
+                                        String urlString = namespaceURL.toString();
+                                        int jarFragmentIndex = urlString.lastIndexOf('!');
+                                        if (jarFragmentIndex > 0 && jarFragmentIndex < urlString.length() - 1) {
+                                            String jarUrlOnly = urlString.substring(0, jarFragmentIndex);
+                                            String oldFragment = urlString.substring(jarFragmentIndex + 1);
+                                            String newFragment = URI.create(oldFragment).resolve(systemId).toString();
+                                            String newJarUri = jarUrlOnly + '!' + newFragment;
+                                            systemIdUri = URI.create(newJarUri);
+                                        }
+                                    }
                                     InputStream resourceStream = systemIdUri.toURL().openStream();
                                     return new LSInputImpl(publicId, systemId, resourceStream);
                                 }