+1
On May 14, 2013, at 8:16 AM, Alan Bateman wrote:

> 
> 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);

Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering 
1 Network Drive 
Burlington, MA 01803
lance.ander...@oracle.com

Reply via email to