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() )


Reply via email to