Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6582545

Erronous parsing of an xml file

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • 6
    • xml

      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

            joehw Joe Wang
            ndcosta Nelson Dcosta (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: