1/*
2 * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24package stream;
25
26import java.io.StringReader;
27
28import javax.xml.stream.XMLInputFactory;
29import javax.xml.stream.XMLStreamConstants;
30import javax.xml.stream.XMLStreamException;
31import javax.xml.stream.XMLStreamReader;
32
33import org.testng.annotations.Listeners;
34import org.testng.annotations.Test;
35
36/*
37 * @test
38 * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
39 * @run testng/othervm -DrunSecMngr=true stream.IgnoreExternalDTDTest
40 * @run testng/othervm stream.IgnoreExternalDTDTest
41 * @summary Test feature ignore-external-dtd.
42 */
43@Listeners({jaxp.library.FilePolicy.class})
44public class IgnoreExternalDTDTest {
45
46    final static String FACTORY_KEY = "javax.xml.stream.XMLInputFactory";
47    static final String IGNORE_EXTERNAL_DTD = "ignore-external-dtd";
48    static final String ZEPHYR_PROPERTY_PREFIX = "http://java.sun.com/xml/stream/properties/";
49
50    @Test
51    public void testFeaturePositive() throws Exception {
52        XMLInputFactory xif = XMLInputFactory.newInstance();
53        xif.setProperty(ZEPHYR_PROPERTY_PREFIX + IGNORE_EXTERNAL_DTD, Boolean.TRUE);
54        parse(xif);
55    }
56
57    @Test
58    public void testFeatureNegative() throws Exception {
59        XMLInputFactory xif = XMLInputFactory.newInstance();
60        xif.setProperty(ZEPHYR_PROPERTY_PREFIX + IGNORE_EXTERNAL_DTD, Boolean.FALSE);
61        try {
62            parse(xif);
63            // refer to 6440324, absent of that change, an exception would be
64            // thrown;
65            // due to the change made for 6440324, parsing will continue without
66            // exception
67            // fail();
68        } catch (XMLStreamException e) {
69            // the error is expected that no DTD was found
70        }
71    }
72
73    private void parse(XMLInputFactory xif) throws XMLStreamException {
74        XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader("<?xml version='1.0'?><!DOCTYPE root PUBLIC 'abc' 'def'><abc />"));
75        while (xsr.next() != XMLStreamConstants.END_DOCUMENT)
76            ;
77    }
78
79}
80