Author: fmeschbe
Date: Mon Mar 28 11:02:25 2011
New Revision: 1086183

URL: http://svn.apache.org/viewvc?rev=1086183&view=rev
Log:
SLING-2033 Throw an IOException if the target node name consists of the 
extension "jcr.xml" only

Modified:
    
sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentImporter.java

Modified: 
sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentImporter.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentImporter.java?rev=1086183&r1=1086182&r2=1086183&view=diff
==============================================================================
--- 
sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentImporter.java
 (original)
+++ 
sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentImporter.java
 Mon Mar 28 11:02:25 2011
@@ -42,7 +42,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * The <code>DefaultContentImporter</code> is the default implementation of 
the 
+ * The <code>DefaultContentImporter</code> is the default implementation of the
  * ContentImporter service providing the following functionality:
  * <ul>
  * <li>Import content into the content repository.
@@ -67,7 +67,7 @@ public class DefaultContentImporter exte
      * @scr.reference
      */
     private MimeTypeService mimeTypeService;
-    
+
     /**
      * To be used for the encryption. E.g. for passwords in
      * {@link javax.jcr.SimpleCredentials#getPassword()} SimpleCredentials}
@@ -77,15 +77,15 @@ public class DefaultContentImporter exte
     private static final String PROP_PASSWORD_DIGEST_ALGORITHM = 
"password.digest.algorithm";
     private static final String DEFAULT_PASSWORD_DIGEST_ALGORITHM = "sha1";
     private String passwordDigestAlgoritm = null;
-    
-    
+
+
     /* (non-Javadoc)
         * @see 
org.apache.sling.jcr.contentloader.ContentImporter#importContent(javax.jcr.Node,
 java.lang.String, java.io.InputStream, 
org.apache.sling.jcr.contentloader.ImportOptions, 
org.apache.sling.jcr.contentloader.ContentImportListener)
         */
        public void importContent(Node parent, String name,
                        InputStream contentStream, ImportOptions importOptions,
                        ContentImportListener importListener) throws 
RepositoryException, IOException {
-               
+
         // special treatment for system view imports
         if (name.endsWith(EXT_JCR_XML)) {
             Node node = importSystemView(parent, name, contentStream);
@@ -96,13 +96,13 @@ public class DefaultContentImporter exte
                return;
             }
         }
-               
+
        DefaultContentCreator contentCreator = new DefaultContentCreator(this);
         List<String> createdPaths = new ArrayList<String>();
         contentCreator.init(importOptions, this.defaultImportProviders, 
createdPaths, importListener);
-        
+
         contentCreator.prepareParsing(parent, toPlainName(contentCreator, 
name));
-        
+
         final ImportProvider ip = contentCreator.getImportProvider(name);
         ContentReader reader = ip.getReader();
                reader.parse(contentStream, contentCreator);
@@ -116,7 +116,7 @@ public class DefaultContentImporter exte
             versionable.checkin();
         }
     }
-    
+
     private String toPlainName(DefaultContentCreator contentCreator, String 
name) {
         final String providerExt = 
contentCreator.getImportProviderExtension(name);
         if (providerExt != null) {
@@ -128,7 +128,7 @@ public class DefaultContentImporter exte
         return name;
     }
 
-    
+
     /**
      * Import the XML file as JCR system or document view import. If the XML
      * file is not a valid system or document view export/import file,
@@ -147,14 +147,20 @@ public class DefaultContentImporter exte
         try {
 
             // check whether we have the content already, nothing to do then
-            if ( name.endsWith(EXT_JCR_XML) ) {
-                name = name.substring(0, name.length() - EXT_JCR_XML.length());
+            final String nodeName = (name.endsWith(EXT_JCR_XML))
+                    ? name.substring(0, name.length() - EXT_JCR_XML.length())
+                    : name;
+
+            // ensure the name is not empty
+            if (nodeName.length() == 0) {
+                throw new IOException("Node name must not be empty (or 
extension only)");
             }
-            if (parent.hasNode(name)) {
+
+            if (parent.hasNode(nodeName)) {
                 log.debug(
                     "importSystemView: Node {} for XML already exists, nothing 
to to",
-                    name);
-                return parent.getNode(name);
+                    nodeName);
+                return parent.getNode(nodeName);
             }
 
             ins = contentStream;
@@ -162,7 +168,7 @@ public class DefaultContentImporter exte
             session.importXML(parent.getPath(), ins, IMPORT_UUID_CREATE_NEW);
 
             // additionally check whether the expected child node exists
-            return (parent.hasNode(name)) ? parent.getNode(name) : null;
+            return (parent.hasNode(nodeName)) ? parent.getNode(nodeName) : 
null;
         } catch (InvalidSerializedDataException isde) {
 
             // the xml might not be System or Document View export, fall back
@@ -188,10 +194,10 @@ public class DefaultContentImporter exte
             }
         }
     }
-    
-    
+
+
     // ---------- JcrContentHelper implementation 
---------------------------------------------
-    
+
        /* (non-Javadoc)
         * @see 
org.apache.sling.jcr.contentloader.internal.JcrContentHelper#digestPassword(java.lang.String)
         */
@@ -218,8 +224,8 @@ public class DefaultContentImporter exte
         MimeTypeService mts = mimeTypeService;
         return (mts != null) ? mts.getMimeType(name) : null;
        }
-       
-       
+
+
     // ---------- SCR Integration ---------------------------------------------
 
     /** Activates this component, called by SCR before registering as a 
service */
@@ -232,10 +238,10 @@ public class DefaultContentImporter exte
             passwordDigestAlgoritm = DEFAULT_PASSWORD_DIGEST_ALGORITHM;
         }
     }
- 
+
     /** Deativates this component, called by SCR to take out of service */
     protected void deactivate(ComponentContext componentContext) {
         passwordDigestAlgoritm = null;
     }
-    
+
 }


Reply via email to