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

XML Catalogs doesn't support OASIS TR9401 simple entity catalog format

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 11, 13, 14
    • xml
    • generic
    • generic

      ADDITIONAL SYSTEM INFORMATION :
      Java 9 and above with new XML Catalogs

      Intel® Core™ i5-4310U CPU @ 2.00GHz × 4
      Linux dkec-vulcan 5.0.0-29-generic #31~18.04.1-Ubuntu SMP Thu Sep 12 18:29:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
      java version "13" 2019-09-17
      Java(TM) SE Runtime Environment (build 13+33)
      Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)

      A DESCRIPTION OF THE PROBLEM :
      JEP 268 Promised replacement of the old internal catalog resolver, JEP proposes to remove the internal catalog resolver implementation after the public API is delivered. But new implementation doesn't support TR 9401 which makes it impossible to use it for example in the XJC

      Related issue: https://github.com/eclipse-ee4j/jaxb-ri/issues/1171



      REGRESSION : Last worked in version 8

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1. Use javax.xml.catalog.CatalogManager with OASIS TR9401 simple entity catalog format

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      1. No exception thrown(there shouldn't be one even when catalog resolver cant parse the syntax see spec https://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html#s.res.fail )
      2. Catalog entries are used for resolving
      ACTUAL -
      javax.xml.catalog.CatalogException: JAXP09030002: Failed to parse the catalog file.
      at java.xml/javax.xml.catalog.CatalogMessages.reportRunTimeError(CatalogMessages.java:93)
      at java.xml/javax.xml.catalog.CatalogImpl.parse(CatalogImpl.java:297)
      at java.xml/javax.xml.catalog.CatalogImpl.load(CatalogImpl.java:171)
      at java.xml/javax.xml.catalog.CatalogManager.catalog(CatalogManager.java:73)
      at java.xml/javax.xml.catalog.CatalogManager.catalogResolver(CatalogManager.java:119)
      at com.sun.tools.xjc.CatalogUtil.getCatalog(CatalogUtil.java:35)
      at com.sun.tools.xjc.Options.addCatalog(Options.java:812)
      at com.sun.tools.xjc.XJCBase.setCatalog(XJCBase.java:318)
      ...
      Caused by: org.xml.sax.SAXParseException; systemId: file:/home/kec/idp/ora/eclipse-ee4j/jaxb-ri/jaxb-ri/samples/src/main/samples/catalog-resolver/catalog.cat; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
      at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
      at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
      at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
      at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
      at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1471)
      at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:978)
      at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
      at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
      at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:541)
      at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)
      at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
      at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
      at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)
      at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)
      at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:324)
      at java.xml/javax.xml.parsers.SAXParser.parse(SAXParser.java:276)
      at java.xml/javax.xml.catalog.CatalogImpl.parse(CatalogImpl.java:295)

      ---------- BEGIN SOURCE ----------
      import java.nio.file.Files;
      import java.nio.file.Paths;
      import java.io.File;
      import java.io.IOException;
      import java.net.URI;
      import java.util.ArrayList;
      import javax.xml.catalog.CatalogFeatures;
      import javax.xml.catalog.CatalogFeatures.Feature;
      import javax.xml.catalog.CatalogManager;
      import org.xml.sax.EntityResolver;

      public class Main {
       
          static String catContent = "--\nA simple entity catalog TR 9401 comment\n--\n\n" +
      "SYSTEM \"http://www.w3.org/2001/xml.xsd\" \"xml.xsd\n\n" +
      "PUBLIC \"-//W3C//DTD XMLSCHEMA 200102//EN\" \"s4s/XMLSchema.dtd\"\n";

          public static void main( String[] args ) throws Exception {
      URI uri = Main.class.getResource("catalog.cat").toURI();
      Files.write(Paths.get("./catalog.cat"), catContent.getBytes());
      System.out.println("Path: "+new File(uri).getAbsolutePath());
      System.out.println("Exists: "+new File(uri).exists());
      javax.xml.catalog.CatalogFeatures CATALOG_FEATURES = CatalogFeatures.builder().with(Feature.RESOLVE, "continue").build();
      javax.xml.catalog.CatalogManager.catalogResolver(CATALOG_FEATURES, uri);
          }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Using old internal com.sun.org.apache.xml.internal.resolver.Catalog

      FREQUENCY : always


            joehw Joe Wang
            webbuggrp Webbug Group
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: