You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by tl...@apache.org on 2006/11/08 11:29:48 UTC

svn commit: r472442 - in /incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource: URIResolver.java XmlSchemaURIResolver.java

Author: tli
Date: Wed Nov  8 02:29:47 2006
New Revision: 472442

URL: http://svn.apache.org/viewvc?view=rev&rev=472442
Log:
CXF-178 add support for get resource with relative path of jar file

Modified:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/URIResolver.java
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/XmlSchemaURIResolver.java

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/URIResolver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/URIResolver.java?view=diff&rev=472442&r1=472441&r2=472442
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/URIResolver.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/URIResolver.java Wed Nov  8 02:29:47 2006
@@ -96,7 +96,7 @@
         if (uriStr.startsWith("classpath:")) {
             tryClasspath(uriStr);
         } else if (baseUriStr != null && baseUriStr.startsWith("jar:")) {
-            tryJar(baseUriStr, uriStr);
+            tryJarState(baseUriStr, uriStr);
         } else if (uriStr.startsWith("jar:")) {
             tryJar(uriStr);
         } else {
@@ -233,6 +233,22 @@
         }
     }
 
+    private void tryJarState(String baseStr, String uriStr) throws IOException {
+        int i = baseStr.indexOf('!');
+        if (i == -1) {
+            tryFileSystemState(baseStr, uriStr);
+            return;
+        }
+        baseStr = baseStr.substring(i + 1);
+        URI u = getAbsoluteFileStr(baseStr.startsWith("file:") ? baseStr : "file:" + baseStr, uriStr);
+        // remove the prefix "file:"
+        tryClasspath(u.toString().substring(5));
+        if (is != null) {
+            return;
+        }        
+        tryFileSystemState("", uriStr);
+    }
+    
     private void tryJar(String baseStr, String uriStr) throws IOException {
         int i = baseStr.indexOf('!');
         if (i == -1) {
@@ -260,13 +276,12 @@
         uriStr = uriStr.substring(i + 1);
         tryClasspath(uriStr);
     }
+    
     private void tryClasspath(String uriStr) throws IOException {
         if (uriStr.startsWith("classpath:")) {
             uriStr = uriStr.substring(10);
         }
-
         URL url = ClassLoaderUtils.getResource(uriStr, calling);
-
         if (url == null) {
             tryRemote(uriStr);
         } else {

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/XmlSchemaURIResolver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/XmlSchemaURIResolver.java?view=diff&rev=472442&r1=472441&r2=472442
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/XmlSchemaURIResolver.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/XmlSchemaURIResolver.java Wed Nov  8 02:29:47 2006
@@ -52,27 +52,47 @@
         }
     }
     public InputSource resolveEntity(String targetNamespace, String schemaLocation, String baseUri) {
-        try {            
-            if (new URI(baseUri).isAbsolute()) {
-                currentResolver = new org.apache.cxf.resource.URIResolver();
-                stack.addElement(new ResolverInfo(schemaLocation, currentResolver));            
-            } else {
-                while (!stack.isEmpty()) {
-                    ResolverInfo ri = stack.pop();
-                    if (ri.getUri().equals(baseUri)) {
-                        currentResolver = ri.getResolver();
-                        stack.addElement(ri);
-                        break;
+        try {
+            if (baseUri != null) {
+                URI check = null;
+                if (baseUri.startsWith("classpath:")) {
+                    check = new URI(baseUri.substring(10));
+                } else if (baseUri.startsWith("jar:")) {
+                    int i = baseUri.indexOf("!");
+                    if (i != -1) {
+                        String bu = baseUri.substring(i + 1);
+                        check = new URI(bu.startsWith("file:") ? bu : "file:" + bu);
+                    } else {
+                        check = new URI(baseUri);
                     }
+                } else {
+                    check = new URI(baseUri);
+                }
+                if (check.isAbsolute()) {
+                    currentResolver = new org.apache.cxf.resource.URIResolver();
+                    stack.addElement(new ResolverInfo(schemaLocation, currentResolver));            
+                } else {
+                    while (!stack.isEmpty()) {
+                        ResolverInfo ri = stack.pop();
+                        if (ri.getUri().equals(baseUri)) {
+                            currentResolver = ri.getResolver();
+                            stack.addElement(ri);
+                            break;
+                        }
+                    }
+                    stack.addElement(new ResolverInfo(schemaLocation, currentResolver));            
+                }
+                if (currentResolver == null) {
+                    throw new RuntimeException("invalidate schema import");
+                }
+            } else {
+                if (currentResolver == null) {
+                    currentResolver = new org.apache.cxf.resource.URIResolver();
                 }
-                stack.addElement(new ResolverInfo(schemaLocation, currentResolver));            
-            }
-            if (currentResolver == null) {
-                throw new RuntimeException("invalidate schema import");
             }
             currentResolver.resolveStateful(baseUri, schemaLocation, getClass());
             if (currentResolver.isResolved()) {
-                if (currentResolver.getURI().isAbsolute()) {
+                if (currentResolver.getURI() != null && currentResolver.getURI().isAbsolute()) {
                     // When importing a relative file,
                     // setSystemId with an absolute path so the
                     // resolver finds any files which that file
@@ -94,4 +114,5 @@
 
     }
 
+    
 }