This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.contentloader-2.0.6 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-contentloader.git
commit dd0dad24e36f5756da7d66da2472363f6afe19ac Author: Carsten Ziegeler <[email protected]> AuthorDate: Tue Jan 26 07:52:22 2010 +0000 SLING-1325 : Bundle deploy fails utterly if any XML files contains an element named "type" - throw exception now instead of an NPE. git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/contentloader@903115 13f79535-47bb-0310-9956-ffa450edef68 --- .../contentloader/internal/readers/XmlReader.java | 32 +++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/sling/jcr/contentloader/internal/readers/XmlReader.java b/src/main/java/org/apache/sling/jcr/contentloader/internal/readers/XmlReader.java index 4f16bd6..8cd74e1 100644 --- a/src/main/java/org/apache/sling/jcr/contentloader/internal/readers/XmlReader.java +++ b/src/main/java/org/apache/sling/jcr/contentloader/internal/readers/XmlReader.java @@ -156,10 +156,10 @@ public class XmlReader implements ContentReader { /** - * @see org.apache.sling.jcr.contentloader.internal.ContentReader#parse(java.net.URL, org.apache.sling.jcr.contentloader.internal.ContentCreator) + * @see org.apache.sling.jcr.contentloader.internal.ContentReader#parse(URL, org.apache.sling.jcr.contentloader.internal.ContentCreator) */ - public synchronized void parse(java.net.URL url, ContentCreator creator) - throws IOException, RepositoryException { + public synchronized void parse(final URL url, final ContentCreator creator) + throws IOException, RepositoryException { BufferedInputStream bufferedInput = null; try { // We need to buffer input, so that we can reset the stream if we encounter an XSL stylesheet reference @@ -172,8 +172,11 @@ public class XmlReader implements ContentReader { } } - private void parseInternal(InputStream bufferedInput, ContentCreator creator, java.net.URL xmlLocation) throws XmlPullParserException, IOException, RepositoryException { - final StringBuffer contentBuffer = new StringBuffer(); + private void parseInternal(final InputStream bufferedInput, + final ContentCreator creator, + final URL xmlLocation) + throws XmlPullParserException, IOException, RepositoryException { + final StringBuilder contentBuffer = new StringBuilder(); // Mark the beginning of the stream. We assume that if there's an XSL processing instruction, // it will occur in the first gulp - which makes sense, as processing instructions must be // specified before the root elemeent of an XML file. @@ -223,7 +226,7 @@ public class XmlReader implements ContentReader { } else if (ELEM_FILE_NAME.equals(currentElement) && ELEM_FILE_NAMESPACE.equals(this.xmlParser.getNamespace())) { int attributeCount = this.xmlParser.getAttributeCount(); if (attributeCount < 2 || attributeCount > 3) { - throw new IOException("File element must have these attributes: url, mimeType and lastModified"); + throw new IOException("File element must have these attributes: url, mimeType and lastModified: " + xmlLocation); } try { AttributeMap attributes = AttributeMap.getInstance(); @@ -232,7 +235,7 @@ public class XmlReader implements ContentReader { FileDescription.SHARED.setValues(attributes); attributes.clear(); } catch (ParseException e) { - IOException ioe = new IOException("Error parsing file description"); + IOException ioe = new IOException("Error parsing file description: " + xmlLocation); ioe.initCause(e); throw ioe; } @@ -257,12 +260,21 @@ public class XmlReader implements ContentReader { } } else if (ELEM_VALUE.equals(qName)) { + if ( currentProperty == null ) { + throw new IOException("XML file does not seem to contain valid content xml. Unexpected " + ELEM_VALUE + " element in : " + xmlLocation); + } currentProperty.addValue(content); } else if (ELEM_VALUES.equals(qName)) { + if ( currentProperty == null ) { + throw new IOException("XML file does not seem to contain valid content xml. Unexpected " + ELEM_VALUE + " element in : " + xmlLocation); + } currentProperty.isMultiValue = true; } else if (ELEM_TYPE.equals(qName)) { + if ( currentProperty == null ) { + throw new IOException("XML file does not seem to contain valid content xml. Unexpected " + ELEM_VALUE + " element in : " + xmlLocation); + } currentProperty.type = content; } else if (ELEM_NODE.equals(qName)) { @@ -271,13 +283,13 @@ public class XmlReader implements ContentReader { } else if (ELEM_PRIMARY_NODE_TYPE.equals(qName)) { if ( currentNode == null ) { - throw new IOException("Element is not allowed at this location: " + qName); + throw new IOException("Element is not allowed at this location: " + qName + " in " + xmlLocation); } currentNode.primaryNodeType = content; } else if (ELEM_MIXIN_NODE_TYPE.equals(qName)) { if ( currentNode == null ) { - throw new IOException("Element is not allowed at this location: " + qName); + throw new IOException("Element is not allowed at this location: " + qName + " in " + xmlLocation); } currentNode.addMixinType(content); } @@ -321,7 +333,7 @@ public class XmlReader implements ContentReader { * @throws IOException */ public void startTransform() throws IOException { - final URL xslResource = new java.net.URL(xmlLocation, this.xslHref); + final URL xslResource = new URL(xmlLocation, this.xslHref); /* if (xslResource == null) { -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
