1 /*
2  * Copyright (c) 2014, 2015, 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 sax;
25 
26 import java.io.IOException;
27 
28 import org.xml.sax.Attributes;
29 import org.xml.sax.InputSource;
30 import org.xml.sax.Locator;
31 import org.xml.sax.SAXException;
32 import org.xml.sax.SAXParseException;
33 import org.xml.sax.ext.Attributes2Impl;
34 import org.xml.sax.ext.DefaultHandler2;
35 import org.xml.sax.ext.Locator2;
36 import org.xml.sax.ext.Locator2Impl;
37 import org.xml.sax.helpers.XMLFilterImpl;
38 import org.xml.sax.helpers.XMLReaderAdapter;
39 
40 public class MyDefaultHandler2 extends DefaultHandler2 {
41     Locator2Impl locator = new Locator2Impl();
42     StringBuffer currentValue = new StringBuffer();
43     String version = "customVersion";
44     String encoding = "customEncoding";
45 
setDocumentLocator(Locator locator)46     public void setDocumentLocator(Locator locator) {
47         this.locator = new Locator2Impl((Locator2) locator);
48         this.locator.setXMLVersion(version);
49         this.locator.setEncoding(encoding);
50     }
51 
startDocument()52     public void startDocument() throws SAXException {
53         super.startDocument();
54         System.out.println("startDocument() is invoked");
55         System.out.println(locator.getXMLVersion());
56         System.out.println(locator.getEncoding());
57     }
58 
attributeDecl(String ename, String aname, String type, String mode, String value)59     public void attributeDecl(String ename, String aname, String type, String mode, String value) throws SAXException {
60         super.attributeDecl(ename, aname, type, mode, value);
61         System.out.println("attributeDecl() is invoked for attr :" + aname);
62     }
63 
elementDecl(String name, String model)64     public void elementDecl(String name, String model) throws SAXException {
65         super.elementDecl(name, model);
66         System.out.println("elementDecl() is invoked for element : " + name);
67     }
68 
internalEntityDecl(String name, String value)69     public void internalEntityDecl(String name, String value) throws SAXException {
70         super.internalEntityDecl(name, value);
71         System.out.println("internalEntityDecl() is invoked for entity : " + name);
72     }
73 
externalEntityDecl(String name, String publicId, String systemId)74     public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException {
75         super.externalEntityDecl(name, publicId, systemId);
76         System.out.println("externalEntityDecl() is invoked for entity : " + name);
77     }
78 
comment(char[] ch, int start, int length)79     public void comment(char[] ch, int start, int length) throws SAXException {
80         super.comment(ch, start, length);
81         System.out.println(new String(ch, start, length));
82     }
83 
endDocument()84     public void endDocument() throws SAXException {
85         super.endDocument();
86         System.out.println("\nendDocument() is invoked");
87     }
88 
startCDATA()89     public void startCDATA() throws SAXException {
90         super.startCDATA();
91         System.out.println("startCDATA() is invoked");
92     }
93 
endCDATA()94     public void endCDATA() throws SAXException {
95         super.endCDATA();
96         System.out.println("endCDATA() is invoked");
97     }
98 
startEntity(String name)99     public void startEntity(String name) throws SAXException {
100         super.startEntity(name);
101         // System.out.println("startEntity() is invoked for entity : " + name) ;
102     }
103 
endEntity(String name)104     public void endEntity(String name) throws SAXException {
105         super.endEntity(name);
106         // System.out.println("endEntity() is invoked for entity : " + name) ;
107     }
108 
startElement(String uri, String localName, String qName, Attributes attributes)109     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
110         super.startElement(uri, localName, qName, attributes);
111         if (qName.equals("toy")) {
112             Attributes2Impl impl = new Attributes2Impl();
113             impl.setAttributes(attributes);
114             System.out.println("\ntoy id=" + impl.getValue("id"));
115         } else if (qName.equals("price") || qName.equals("name")) {
116             System.out.print("       " + qName + " : ");
117             currentValue = new StringBuffer();
118         }
119     }
120 
endElement(String uri, String localName, String qName)121     public void endElement(String uri, String localName, String qName) throws SAXException {
122         super.endElement(uri, localName, qName);
123         if (qName.equals("price") || qName.equals("name")) {
124             System.out.print(currentValue.toString());
125         }
126     }
127 
startDTD(String name, String publicId, String systemId)128     public void startDTD(String name, String publicId, String systemId) throws SAXException {
129         super.startDTD(name, publicId, systemId);
130         System.out.println("startDTD() is invoked");
131     }
132 
endDTD()133     public void endDTD() throws SAXException {
134         super.endDTD();
135         System.out.println("endDTD() is invoked");
136     }
137 
characters(char[] ch, int start, int length)138     public void characters(char[] ch, int start, int length) {
139         // System.out.println(start + " " + length) ;
140         currentValue.append(ch, start, length);
141     }
142 
resolveEntity(String publicId, String systemId)143     public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
144         System.out.println("resolveEntity(publicId, systemId) is invoked");
145         return super.resolveEntity(publicId, systemId);
146     }
147 
resolveEntity(String name, String publicId, String baseURI, String systemId)148     public InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws SAXException, IOException {
149         System.out.println("resolveEntity(name, publicId, baseURI, systemId) is invoked");
150         return super.resolveEntity(name, publicId, baseURI, systemId);
151     }
152 
getExternalSubset(String name, String baseURI)153     public InputSource getExternalSubset(String name, String baseURI) throws SAXException, IOException {
154         System.out.println("getExternalSubset() is invoked");
155         return super.getExternalSubset(name, baseURI);
156     }
157 
startPrefixMapping(String prefix, String uri)158     public void startPrefixMapping(String prefix, String uri) {
159         System.out.println("startPrefixMapping() is invoked for " + prefix + " : " + uri);
160         try {
161             new XMLReaderAdapter().startPrefixMapping(prefix, uri);
162         } catch (SAXException e) {
163             e.printStackTrace();
164         }
165     }
166 
endPrefixMapping(String prefix)167     public void endPrefixMapping(String prefix) {
168         System.out.println("\nendPrefixMapping() is invoked for " + prefix);
169         try {
170             new XMLReaderAdapter().endPrefixMapping(prefix);
171         } catch (SAXException e) {
172             e.printStackTrace();
173         }
174     }
175 
skippedEntity(String name)176     public void skippedEntity(String name) {
177         try {
178             System.out.println("skippedEntity() is invoked for : " + name);
179             new XMLReaderAdapter().skippedEntity(name);
180         } catch (SAXException e) {
181             e.printStackTrace();
182         }
183     }
184 
error(SAXParseException e)185     public void error(SAXParseException e) throws SAXException {
186         System.out.println("error() is invoked for in ErrorHandler");
187         new XMLFilterImpl().warning(e);
188     }
189 
fatalError(SAXParseException e)190     public void fatalError(SAXParseException e) throws SAXException {
191         System.out.println("fatalError() is invoked for in ErrorHandler");
192         new XMLFilterImpl().warning(e);
193     }
194 
warning(SAXParseException e)195     public void warning(SAXParseException e) throws SAXException {
196         System.out.println("warning() is invoked for in ErrorHandler");
197         new XMLFilterImpl().warning(e);
198     }
199 
200 }
201