8014500: bootcycle-images fails after upgrade to JAXP 1.5

Erik Joelsson erik.joelsson at oracle.com
Tue May 14 14:36:42 UTC 2013


Looks good from the build side.

/Erik

On 2013-05-14 14:16, 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);



More information about the build-dev mailing list