JDK-6582545 : Erronous parsing of an xml file
  • Type: Bug
  • Component: xml
  • Sub-Component: org.w3c.dom
  • Affected Version: 6
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_2000
  • CPU: x86
  • Submitted: 2007-07-19
  • Updated: 2012-04-25
  • Resolved: 2007-07-21
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.6.0_02-ea"
Java(TM) SE Runtime Environment (build 1.6.0_02-ea-b01)
Java HotSpot(TM) Client VM (build 1.6.0_02-ea-b01, mixed mode, sharing)

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows 2000 [Version 5.00.2195]

A DESCRIPTION OF THE PROBLEM :
The same code and file works with java 1.4.2 and java 1.5 but fail with java 1.6.
When parsing an xml file, an erroneous association is made by the parser between a tag and an attribut. it seem like if the association is made with the attribut of the next tag but truncated to the length  of the expected attribut.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
use the source code and xml file there after. For example in the same directory if the source is "MyParserXml. java"and the file "xmlFile.xml ".
C:\Opt\jdk1.6.0_02\bin\java MyParserXml .\xmlFile.xml

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
this a test with JAVA 1.5 or JAVA 1.4.2
----------------------------------------------------------------------------------------------
KEY_ABN_PROC=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ABN_PROC
KEY_ARROW_DOWN=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_DOWN
KEY_ARROW_UP=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_UP
KEY_CLR_LEFT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_CLR1
KEY_CLR_RIGHT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_CLR2
KEY_EMER_CANC=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_EMER_CANC
KEY_MORE=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_MORE
KEY_NORM_C_L=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_NORM_CL
KEY_RCL=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_RCL
KEY_STS=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_STS
KEY_TO_CONFIG=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_TO_CONFIG
KEY_UNDO_CLR=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_UNDO_CLR
KEY_VALID_LEFT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_VALID1
KEY_VALID_RIGHT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_VALID2

Parser in Java 1.5 is OK
for node         = KEY_ARROW_UP
expecting value  =root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_UP
value from parser=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_UP

ACTUAL -
this a test with JAVA 1.6
----------------------------------------------------------------------------------------------
KEY_ABN_PROC=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ABN_PROC
KEY_ARROW_DOWN=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_DOWN
KEY_ARROW_UP=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_DO
KEY_CLR_LEFT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_UNDO
KEY_CLR_RIGHT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_CLR2
KEY_EMER_CANC=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_EMER_CANC
KEY_MORE=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_MORE
KEY_NORM_C_L=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_NORM_CL
KEY_RCL=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_CLR
KEY_STS=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_MOR
KEY_TO_CONFIG=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_TO_CONFIG
KEY_UNDO_CLR=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_UNDO_CLR
KEY_VALID_LEFT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_VALID1
KEY_VALID_RIGHT=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_VALID2

Parser in Java 1.6 is NOK
for node         = KEY_ARROW_UP
expecting value  =root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_UP
value from parser=root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_DO

ERROR MESSAGES/STACK TRACES THAT OCCUR :
No error message

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
this the source code for MyParserXml.java
----------------------------------------------------------------------------------------------import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class MyParserXml
{
	private DocumentBuilder xmlParser = null;
	private Document document = null;
	private String FWS1 = "FWS1";
	private String KEY_ARROW_UP = "KEY_ARROW_UP";
	private String VALUE_ARROW_UP = "root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_UP";
	
	public MyParserXml(String filename)
	{
		
    File xmlFile = null;
    xmlFile = new File (filename);

    // parsing du fichier XML
    try
    {
      DocumentBuilderFactory aDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
      xmlParser = aDocumentBuilderFactory.newDocumentBuilder();
      
      //OK with JDK 1.4.2
      //NOK with JDK 1.6
      document = xmlParser.parse(xmlFile);
      printNode(FWS1);
    }
    catch (SAXException saxException)
    {
		saxException.printStackTrace();
    }
    catch (ParserConfigurationException parserConfigurationException)
    {
    	parserConfigurationException.printStackTrace();
    }
    catch (IOException ioException)
    {
    	ioException.printStackTrace();
    }
    catch( IllegalArgumentException illegalArgumentException)
    {
    	illegalArgumentException.printStackTrace();
    }
  }
	
  private void printNode(String aNode)
  {
      NodeList nodeList;
      NamedNodeMap attributes;

      nodeList = document.getElementsByTagName(aNode);
      attributes = nodeList.item(0).getAttributes();
      
      String name;
      String value;
//    Print all nodes
      for (int k = 0; k < attributes.getLength(); k++)
      {
        name = attributes.item(k).getNodeName();
        value = attributes.item(k).getNodeValue();
        System.out.println (name + "=" + value);
      }
      
      System.out.println();
      //Test specifique a node
  	  String javaSpecificationVersion = System.getProperty("java.specification.version");
      for (int k = 0; k < attributes.getLength(); k++)
      {
        name = attributes.item(k).getNodeName();
        value = attributes.item(k).getNodeValue();
        if (KEY_ARROW_UP.equals(name))
        {
        	if (VALUE_ARROW_UP.equals(value))
        	{
        		//Parser OK
        		System.out.println("Parser in Java "+ javaSpecificationVersion + " is OK");
        	}
        	else
        	{
        		//Parser NOK
        		System.out.println("Parser in Java "+ javaSpecificationVersion + " is NOK");
        	}
        	System.out.println("for node         = " + KEY_ARROW_UP);
    		System.out.println("expecting value  =" + VALUE_ARROW_UP);
    		System.out.println("value from parser=" + value);
        }
      }
  }
	
  public static void main(String[] args)
  {
	MyParserXml myParser = new MyParserXml(args[0]);
  }
}
----------------------------------------------------------------------------------------------
this the associated file xmlFile.xml
----------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<SimulationIcp Object="Configuration"><!--Configuration ICP-->
<FWS1
	KEY_TO_CONFIG="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_TO_CONFIG"
	KEY_NORM_C_L="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_NORM_CL"
	KEY_VALID_LEFT="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_VALID1"
	KEY_VALID_RIGHT="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_VALID2"
	KEY_ABN_PROC="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ABN_PROC"
	KEY_EMER_CANC="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_EMER_CANC"
	KEY_ARROW_UP="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_UP"
	KEY_ARROW_DOWN="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_ARROW_DOWN"
	KEY_CLR_LEFT="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_CLR1"
	KEY_UNDO_CLR="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_UNDO_CLR"
	KEY_STS="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_STS"
	KEY_MORE="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_MORE"
	KEY_RCL="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_RCL"
	KEY_CLR_RIGHT="root%LRM%Tmp_CPIOM-C1%VLIN_For_ECP%ECP_IN_Port_1%IOM-A7_Msg_cd30%FDS_1_ECP_to_FWS-1%A31_ECP_CLR2"
/>
</SimulationIcp>

---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
No solution for by passing

Comments
EVALUATION This issue has been fixed in 6518733. The fix is available and can be downloaded from jaxp.dev.java.net.
21-07-2007