You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2013/08/14 22:40:58 UTC

svn commit: r1514034 - in /cxf/trunk: core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java core/src/main/java/org/apache/cxf/bus/spring/BusEntityResolver.java testutils/src/main/java/org/apache/cxf/test/TestApplicationContext.java

Author: dkulp
Date: Wed Aug 14 20:40:57 2013
New Revision: 1514034

URL: http://svn.apache.org/r1514034
Log:
[CXF-5181] Spring doesn't set the proper systemId so relative schema imports don't work very well.

Modified:
    cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java
    cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusEntityResolver.java
    cxf/trunk/testutils/src/main/java/org/apache/cxf/test/TestApplicationContext.java

Modified: cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java
URL: http://svn.apache.org/viewvc/cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java?rev=1514034&r1=1514033&r2=1514034&view=diff
==============================================================================
--- cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java (original)
+++ cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusApplicationContext.java Wed Aug 14 20:40:57 2013
@@ -313,7 +313,7 @@ public class BusApplicationContext exten
     
     void setEntityResolvers(XmlBeanDefinitionReader reader) {
         ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        reader.setEntityResolver(new BusEntityResolver(new BeansDtdResolver(),
+        reader.setEntityResolver(new BusEntityResolver(cl, new BeansDtdResolver(),
             new PluggableSchemaResolver(cl)));
     }
     @Override

Modified: cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusEntityResolver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusEntityResolver.java?rev=1514034&r1=1514033&r2=1514034&view=diff
==============================================================================
--- cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusEntityResolver.java (original)
+++ cxf/trunk/core/src/main/java/org/apache/cxf/bus/spring/BusEntityResolver.java Wed Aug 14 20:40:57 2013
@@ -20,6 +20,9 @@
 package org.apache.cxf.bus.spring;
 
 import java.io.IOException;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -29,6 +32,10 @@ import org.xml.sax.SAXException;
 
 import org.apache.cxf.common.logging.LogUtils;
 import org.springframework.beans.factory.xml.DelegatingEntityResolver;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PropertiesLoaderUtils;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 
@@ -39,11 +46,23 @@ public class BusEntityResolver extends D
     
     private EntityResolver dtdResolver;
     private EntityResolver schemaResolver;
+    private Map<String, String> schemaMappings;
+    private ClassLoader classLoader;
     
-    public BusEntityResolver(EntityResolver dr, EntityResolver sr) {
+    public BusEntityResolver(ClassLoader loader, EntityResolver dr, EntityResolver sr) {
         super(dr, sr);
+        classLoader = loader;
         dtdResolver = dr;
         schemaResolver = sr;
+        
+        try {
+            Properties mappings = PropertiesLoaderUtils.loadAllProperties("META-INF/spring.schemas", 
+                                                                          classLoader);
+            schemaMappings = new ConcurrentHashMap<String, String>(mappings.size());
+            CollectionUtils.mergePropertiesIntoMap(mappings, schemaMappings);
+        } catch (IOException e) {
+            //ignore
+        }
     }
 
     @Override
@@ -57,6 +76,14 @@ public class BusEntityResolver extends D
                 source = dtdResolver.resolveEntity(publicId, systemId); 
             }
         }
+        String resourceLocation = schemaMappings.get(systemId);
+        if (resourceLocation != null && publicId == null) {
+            Resource resource = new ClassPathResource(resourceLocation, classLoader);
+            if (resource != null && resource.exists()) {
+                source.setPublicId(systemId);    
+                source.setSystemId(resource.getURL().toString());
+            }
+        }
         return source;
     }    
 }

Modified: cxf/trunk/testutils/src/main/java/org/apache/cxf/test/TestApplicationContext.java
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/java/org/apache/cxf/test/TestApplicationContext.java?rev=1514034&r1=1514033&r2=1514034&view=diff
==============================================================================
--- cxf/trunk/testutils/src/main/java/org/apache/cxf/test/TestApplicationContext.java (original)
+++ cxf/trunk/testutils/src/main/java/org/apache/cxf/test/TestApplicationContext.java Wed Aug 14 20:40:57 2013
@@ -42,7 +42,7 @@ public class TestApplicationContext exte
     @Override
     protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
         ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        reader.setEntityResolver(new BusEntityResolver(new BeansDtdResolver(),
+        reader.setEntityResolver(new BusEntityResolver(cl, new BeansDtdResolver(),
             new PluggableSchemaResolver(cl)));
     }