8146237: PREFER from Features API taking precedence over catalog file
authorjoehw
Wed, 17 Feb 2016 16:32:51 -0800
changeset 36029 a847c5a7e22d
parent 35814 6c644cca3f3f
child 36030 1632bf7a3665
8146237: PREFER from Features API taking precedence over catalog file Reviewed-by: lancea
jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogReader.java
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogTest.java
jaxp/test/javax/xml/jaxp/unittest/catalog/JDK8146237_catalog.xml
--- a/jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogReader.java	Wed Jul 05 21:20:45 2017 +0200
+++ b/jaxp/src/java.xml/share/classes/javax/xml/catalog/CatalogReader.java	Wed Feb 17 16:32:51 2016 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -184,11 +184,14 @@
                     if (resolve == null) {
                         resolve = catalog.getResolve().literal;
                     }
+                    //override property settings with those from the catalog file
                     catalog.setResolve(resolve);
+                    catalog.setPrefer(defer);
                     catalogEntry = new CatalogEntry(base, prefer, defer, resolve);
                 } else {
                     catalogEntry = new CatalogEntry(base, prefer);
                 }
+                catalog.setPrefer(prefer);
                 return;
             } else {
                 inGroup = true;
--- a/jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogTest.java	Wed Jul 05 21:20:45 2017 +0200
+++ b/jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogTest.java	Wed Feb 17 16:32:51 2016 -0800
@@ -23,6 +23,7 @@
 package catalog;
 
 import java.io.IOException;
+import javax.xml.catalog.Catalog;
 import javax.xml.catalog.CatalogFeatures;
 import javax.xml.catalog.CatalogFeatures.Feature;
 import javax.xml.catalog.CatalogManager;
@@ -41,15 +42,36 @@
 import org.xml.sax.ext.DefaultHandler2;
 
 /*
- * @bug 8081248, 8144966, 8146606
+ * @bug 8081248, 8144966, 8146606, 8146237
  * @summary Tests basic Catalog functions.
  */
 
 public class CatalogTest {
+    /**
+     * @bug 8146237
+     * PREFER from Features API taking precedence over catalog file
+     */
+    @Test
+    public void testJDK8146237() {
+        String catalogFile = getClass().getResource("JDK8146237_catalog.xml").getFile();
+
+        try {
+            CatalogFeatures features = CatalogFeatures.builder().with(CatalogFeatures.Feature.PREFER, "system").build();
+            Catalog catalog = CatalogManager.catalog(features, catalogFile);
+            CatalogResolver catalogResolver = CatalogManager.catalogResolver(catalog);
+            String actualSystemId = catalogResolver.resolveEntity("-//FOO//DTD XML Dummy V0.0//EN", "http://www.oracle.com/alt1sys.dtd").getSystemId();
+            Assert.assertTrue(actualSystemId.contains("dummy.dtd"), "Resulting id should contain dummy.dtd, indicating a match by publicId");
+
+        } catch (Exception e) {
+            Assert.fail(e.getMessage());
+        }
+    }
+
     /*
        @bug 8146606
        Verifies that the resulting systemId does not contain duplicate slashes
     */
+    @Test
     public void testRewriteSystem() {
         String catalog = getClass().getResource("rewriteCatalog.xml").getFile();
 
@@ -67,6 +89,7 @@
        @bug 8146606
        Verifies that the resulting systemId does not contain duplicate slashes
     */
+    @Test
     public void testRewriteUri() {
         String catalog = getClass().getResource("rewriteCatalog.xml").getFile();
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/catalog/JDK8146237_catalog.xml	Wed Feb 17 16:32:51 2016 -0800
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<catalog prefer="public" xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+
+    <public publicId="-//FOO//DTD XML Dummy V0.0//EN"
+            uri="dummy.dtd"/>
+</catalog> 
+