[MNG-3839] XML parsing of POM does not reliably coalesce text data

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@714059 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Benjamin Bentmann 2008-11-14 16:26:08 +00:00
parent 2881df1046
commit 1f6060121d
2 changed files with 17 additions and 14 deletions

View File

@ -28,7 +28,7 @@ under the License.
</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>

View File

@ -82,9 +82,10 @@ public final class ModelMarshaller
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 @@ public final class ModelMarshaller
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 @@ public final class ModelMarshaller
}
}
depth++;
tagName = uri.getUriFor( xmlStreamReader.getName().getLocalPart(), depth );
if ( collections.contains( tagName + "#collection" ) )
{
@ -138,8 +145,8 @@ public final class ModelMarshaller
{
uri.addTag( xmlStreamReader.getName().getLocalPart() );
}
tagValue = null;
tagValue.setLength( 0 );
depthOfTagValue = depth;
}
case XMLStreamConstants.ATTRIBUTE:
{
@ -155,15 +162,11 @@ public final class ModelMarshaller
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() )