Author: bentmann Date: Fri Nov 14 08:26:08 2008 New Revision: 714059 URL: http://svn.apache.org/viewvc?rev=714059&view=rev Log: [MNG-3839] XML parsing of POM does not reliably coalesce text data
Modified: maven/components/trunk/maven-shared-model/pom.xml maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java Modified: maven/components/trunk/maven-shared-model/pom.xml URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-shared-model/pom.xml?rev=714059&r1=714058&r2=714059&view=diff ============================================================================== --- maven/components/trunk/maven-shared-model/pom.xml (original) +++ maven/components/trunk/maven-shared-model/pom.xml Fri Nov 14 08:26:08 2008 @@ -28,7 +28,7 @@ </parent> <artifactId>maven-shared-model</artifactId> <version>1.0-SNAPSHOT</version> - <name>maven-shared-model</name> + <name>Maven Shared Model</name> <dependencies> <dependency> <groupId>org.codehaus.woodstox</groupId> Modified: maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java?rev=714059&r1=714058&r2=714059&view=diff ============================================================================== --- maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java (original) +++ maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelMarshaller.java Fri Nov 14 08:26:08 2008 @@ -82,9 +82,10 @@ Uri uri = new Uri( baseUri ); String tagName = baseUri; - String tagValue = null; + StringBuilder tagValue = new StringBuilder( 256 ); int depth = 0; + int depthOfTagValue = depth; XMLStreamReader xmlStreamReader = null; try { @@ -97,22 +98,27 @@ switch ( type ) { + case XMLStreamConstants.CDATA: case XMLStreamConstants.CHARACTERS: { - String tmp = xmlStreamReader.getText(); - if ( tmp != null && tmp.trim().length() != 0 ) + if ( depth == depthOfTagValue ) { - tagValue = tmp; + tagValue.append( xmlStreamReader.getTextCharacters(), xmlStreamReader.getTextStart(), + xmlStreamReader.getTextLength() ); } break; } case XMLStreamConstants.START_ELEMENT: { - depth++; if ( !tagName.equals( baseUri ) ) { - modelProperties.add( new ModelProperty( tagName, tagValue ) ); + String value = null; + if ( depth < depthOfTagValue ) + { + value = tagValue.toString(); + } + modelProperties.add( new ModelProperty( tagName, value ) ); if ( !attributes.isEmpty() ) { for ( Map.Entry<String, String> e : attributes.entrySet() ) @@ -123,6 +129,7 @@ } } + depth++; tagName = uri.getUriFor( xmlStreamReader.getName().getLocalPart(), depth ); if ( collections.contains( tagName + "#collection" ) ) { @@ -138,8 +145,8 @@ { uri.addTag( xmlStreamReader.getName().getLocalPart() ); } - tagValue = null; - + tagValue.setLength( 0 ); + depthOfTagValue = depth; } case XMLStreamConstants.ATTRIBUTE: { @@ -155,15 +162,11 @@ case XMLStreamConstants.END_ELEMENT: { depth--; - if ( tagValue == null ) - { - tagValue = ""; - } break; } case XMLStreamConstants.END_DOCUMENT: { - modelProperties.add( new ModelProperty( tagName, tagValue ) ); + modelProperties.add( new ModelProperty( tagName, tagValue.toString() ) ); if ( !attributes.isEmpty() ) { for ( Map.Entry<String, String> e : attributes.entrySet() )