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

ContentHandler#skippedEntity() not being called when it should

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • tbd
    • 6
    • xml

      FULL PRODUCT VERSION :
      1.6

      ADDITIONAL OS VERSION INFORMATION :
      Linux chopsuey.nyc.corp.google.com 2.6.18.5-gg7-mixed64-32 #1 SMP Tue Feb 13 18:07:55 GMT 2007 x86_64 GNU/Linux


      EXTRA RELEVANT SYSTEM CONFIGURATION :
      not applicable

      A DESCRIPTION OF THE PROBLEM :
      Parse an XML document using SAX (xerces) with an undefined entity &idontexist;

      I expect to have ContentHandler#skippedEntity called with a stack trace something like this (as happens with java 1.5):

       at com.google.gxp.compiler.parser.SaxXmlParser$SaxEventAdapter.skippedEntity(SaxXmlParser.java:219)
              at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startGeneralEntity(AbstractSAXParser.java:419)
              at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startGeneralEntity(XMLDTDValidator.java:1089)
              at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.startEntity(XMLDocumentFragmentScannerImpl.java:634)
              at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.startEntity(XMLDocumentScannerImpl.java:531)
              at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:746)
              at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1334)
              at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1756)
              at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
              at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
              at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
              at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
              at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
              at com.google.gxp.compiler.parser.SaxXmlParser.parse(SaxXmlParser.java:56)

      instead skippedEntity() is NOT called.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      see Description

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      see Description
      ACTUAL -
      see Description

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      not applicable

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      package com.google.hjh;

      import java.io.*;

      import org.xml.sax.*;
      import org.xml.sax.helpers.XMLReaderFactory;

      /**
       * This program demonstrates a bug in JDK 1.6.
       *
       * With JDK 1.5.0_06 it will output OK!
       * With JDK 1.6.0_01 it will output FAIL!
       *
       * @author ###@###.### (Harry Heymann)
       */
      public class XercesBug {

        private static final String BAD_ENTITY = "badentity";

        public static void main(String[] args) throws Exception {
          //System.setProperty("org.xml.sax.driver",
          // "org.apache.xerces.parsers.SAXParser");

          SaxEventHandler saxEventHandler = new SaxEventHandler();

          XMLReader xmlReader = XMLReaderFactory.createXMLReader();
          xmlReader.setContentHandler(saxEventHandler);
          xmlReader.setEntityResolver(saxEventHandler);
          xmlReader.parse(getDocument());

          if (BAD_ENTITY.equals(saxEventHandler.getSkippedEntity())) {
            System.out.println("OK!");
          } else {
            System.out.println("FAIL!");
          }
        }

        private static InputSource getDocument() {
          StringBuilder sb = new StringBuilder();

          sb.append("<!DOCTYPE tag SYSTEM \"http://google.com/test/external.ent\">");
          sb.append("<tag>");
          sb.append("&" + BAD_ENTITY + ";");
          sb.append("</tag>");

          return new InputSource(new StringReader(sb.toString()));
        }

        private static class SaxEventHandler
            implements ContentHandler, EntityResolver {

          private String skippedEntity = null;

          public String getSkippedEntity() {
            return skippedEntity;
          }

          /**
           * This is the real center of the bug. JDK 1.6.0_01 is failing to
           * call this function for some unknown reason.
           */
          public void skippedEntity(String name) {
            skippedEntity = name;
          }

          public InputSource resolveEntity(String publicId, String systemId) {
            InputSource result = new InputSource(new StringReader(""));
            result.setPublicId(publicId);
            result.setSystemId(systemId);
            return result;
          }

          public void setDocumentLocator(Locator locator) {
          }

          public void startDocument() {
          }

          public void endDocument() {
          }

          public void startPrefixMapping(String prefix, String uri) {
          }

          public void endPrefixMapping(String prefix) {
          }

          public void startElement(String nsUri, String localName, String qName,
                                   Attributes saxAttrs) {
          }

          public void endElement(String nsUri, String localName, String qName) {
          }

          public void characters(char[] ch, int start, int length) {
          }

          public void ignorableWhitespace(char ch[], int start, int length) {
          }

          public void processingInstruction(String target, String data) {
          }
        }
      }
      ---------- END SOURCE ----------

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

              Created:
              Updated:
              Imported:
              Indexed: