8014500: bootcycle-images fails after upgrade to JAXP 1.5

Alan Bateman Alan.Bateman at oracle.com
Tue May 14 12:16:30 UTC 2013


The bootcycle-images target is currently broken in jdk8/tl.

Jon has taken 8014461 to fix genstubs but once you get past that then 
the CLDRConverter fails parsing LDML due to DTD references that aren't 
allowed by the default policy in jdk8 (since the update to JAXP 1.5). 
This policy is due to be re-visited later in jdk8 and I expect it will 
need to allow at least access to the DTDs on the file system. For now, 
and to get the boot cycle builds going again, I propose to update the 
CLDRConverter to set the accessExternalDTD property.

Attached is the proposed patch. It uses a hard-coded string rather than 
XMLConstants.ACCESS_EXTERNAL_DTD because the boot JDK will likely have 
an older version of JAXP where this constant isn't defined.

Thanks,
Alan.



diff --git a/make/tools/src/build/tools/cldrconverter/CLDRConverter.java 
b/make/tools/src/build/tools/cldrconverter/CLDRConverter.java
--- a/make/tools/src/build/tools/cldrconverter/CLDRConverter.java
+++ b/make/tools/src/build/tools/cldrconverter/CLDRConverter.java
@@ -34,6 +34,8 @@
  import java.util.*;
  import javax.xml.parsers.SAXParser;
  import javax.xml.parsers.SAXParserFactory;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;


  /**
@@ -234,6 +236,17 @@
          }
      }

+    /**
+     * Configure the parser to allow access to DTDs on the file system.
+     */
+    private static void enableFileAccess(SAXParser parser) throws 
SAXNotSupportedException {
+        try {
+            
parser.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", 
"file");
+        } catch (SAXNotRecognizedException ignore) {
+            // property requires >= JAXP 1.5
+        }
+    }
+
      private static List<Bundle> readBundleList() throws Exception {
          ResourceBundle.Control defCon = 
ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_DEFAULT);
          List<Bundle> retList = new ArrayList<>();
@@ -279,6 +292,7 @@
          SAXParserFactory factory = SAXParserFactory.newInstance();
          factory.setValidating(true);
          SAXParser parser = factory.newSAXParser();
+        enableFileAccess(parser);
          LDMLParseHandler handler = new LDMLParseHandler(id);
          File file = new File(SOURCE_FILE_DIR + File.separator + id + 
".xml");
          if (!file.exists()) {
@@ -314,6 +328,7 @@
          SAXParserFactory factorySuppl = SAXParserFactory.newInstance();
          factorySuppl.setValidating(true);
          SAXParser parserSuppl = factorySuppl.newSAXParser();
+        enableFileAccess(parserSuppl);
          handlerSuppl = new SupplementDataParseHandler();
          File fileSupply = new File(SPPL_SOURCE_FILE);
          parserSuppl.parse(fileSupply, handlerSuppl);
@@ -322,6 +337,7 @@
          SAXParserFactory numberingParser = SAXParserFactory.newInstance();
          numberingParser.setValidating(true);
          SAXParser parserNumbering = numberingParser.newSAXParser();
+        enableFileAccess(parserNumbering);
          handlerNumbering = new NumberingSystemsParseHandler();
          File fileNumbering = new File(NUMBERING_SOURCE_FILE);
          parserNumbering.parse(fileNumbering, handlerNumbering);
@@ -330,6 +346,7 @@
          SAXParserFactory metazonesParser = SAXParserFactory.newInstance();
          metazonesParser.setValidating(true);
          SAXParser parserMetaZones = metazonesParser.newSAXParser();
+        enableFileAccess(parserMetaZones);
          handlerMetaZones = new MetaZonesParseHandler();
          File fileMetaZones = new File(METAZONES_SOURCE_FILE);
          parserNumbering.parse(fileMetaZones, handlerMetaZones);



More information about the build-dev mailing list