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 
24 package validation;
25 
26 import java.io.File;
27 
28 import javax.xml.XMLConstants;
29 import javax.xml.parsers.DocumentBuilder;
30 import javax.xml.parsers.DocumentBuilderFactory;
31 import javax.xml.validation.Schema;
32 import javax.xml.validation.SchemaFactory;
33 
34 import org.testng.Assert;
35 import org.testng.annotations.Listeners;
36 import org.testng.annotations.Test;
37 import org.xml.sax.ErrorHandler;
38 import org.xml.sax.SAXException;
39 import org.xml.sax.SAXParseException;
40 
41 /*
42  * @test
43  * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
44  * @run testng/othervm -DrunSecMngr=true validation.OccursWildcardUnbounded
45  * @run testng/othervm validation.OccursWildcardUnbounded
46  * @summary Test Schema Validator can parse multiple or unbounded occurs.
47  */
48 @Listeners({jaxp.library.FilePolicy.class})
49 public class OccursWildcardUnbounded {
50 
51     boolean errorFound;
52 
53     DocumentBuilder documentBuilder;
54 
printMethodName()55     private void printMethodName() {
56         StackTraceElement[] stack = Thread.currentThread().getStackTrace();
57         System.out.println(stack[2].getMethodName());
58     }
59 
OccursWildcardUnbounded()60     public OccursWildcardUnbounded() throws Exception {
61         SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
62         Schema schema = factory.newSchema(new File(getClass().getResource("occurs-wildcard-unbounded.xsd").getFile()));
63 
64         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
65         dbf.setNamespaceAware(true);
66         dbf.setSchema(schema);
67 
68         documentBuilder = dbf.newDocumentBuilder();
69         documentBuilder.setErrorHandler(new ErrorHandler() {
70             public void error(SAXParseException e) throws SAXException {
71                 System.out.println("Error: " + e.getMessage());
72                 errorFound = true;
73             }
74 
75             public void fatalError(SAXParseException e) throws SAXException {
76                 System.out.println("Fatal error: " + e.getMessage());
77             }
78 
79             public void warning(SAXParseException e) throws SAXException {
80                 System.out.println("Warning: " + e.getMessage());
81             }
82         });
83     }
84 
85     @Test
testOccursUnboundedMaxMinOk()86     public void testOccursUnboundedMaxMinOk() throws Exception {
87         printMethodName();
88 
89         File xmlFile = new File(getClass().getResource("occurs-unbounded-ok.xml").getFile());
90         try {
91             errorFound = false;
92             documentBuilder.parse(xmlFile);
93         } catch (SAXException ex) {
94             Assert.fail(ex.getMessage());
95         }
96         if (errorFound) {
97             Assert.fail("Unexpected validation error reported");
98         }
99     }
100 
101     @Test
testOccursUnboundedMaxMinErrorMin()102     public void testOccursUnboundedMaxMinErrorMin() throws Exception {
103         printMethodName();
104 
105         File xmlFile = new File(getClass().getResource("occurs-unbounded-error-min.xml").getFile());
106         try {
107             errorFound = false;
108             documentBuilder.parse(xmlFile);
109         } catch (SAXException ex) {
110             Assert.fail(ex.getMessage());
111         }
112         if (!errorFound) {
113             Assert.fail("Expected validation error not reported");
114         }
115     }
116 
117 }
118