1 /* 2 * Copyright (c) 1997, 2013, 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. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.tools.internal.ws.wsdl.parser; 27 28 import org.w3c.dom.Document; 29 import org.xml.sax.ContentHandler; 30 import org.xml.sax.EntityResolver; 31 import org.xml.sax.ErrorHandler; 32 import org.xml.sax.InputSource; 33 import org.xml.sax.SAXException; 34 35 import java.io.IOException; 36 37 import com.sun.xml.internal.xsom.parser.XMLParser; 38 39 /** 40 * {@link XMLParser} implementation that 41 * parses XML from a DOM forest instead of parsing it from 42 * its original location. 43 * 44 * @author Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com) 45 * @author Vivek Pandey 46 */ 47 public class DOMForestParser implements XMLParser { 48 49 /** 50 * DOM forest to be "parsed". 51 */ 52 private final DOMForest forest; 53 54 /** 55 * Scanner object will do the actual SAX events generation. 56 */ 57 private final DOMForestScanner scanner; 58 59 private final XMLParser fallbackParser; 60 61 /** 62 * @param fallbackParser This parser will be used when DOMForestParser needs to parse 63 * documents that are not in the forest. 64 */ 65 public DOMForestParser(DOMForest forest, XMLParser fallbackParser) { 66 this.forest = forest; 67 this.scanner = new DOMForestScanner(forest); 68 this.fallbackParser = fallbackParser; 69 } 70 71 72 public void parse(InputSource source, ContentHandler handler, EntityResolver entityResolver, ErrorHandler errHandler) throws SAXException, IOException { 73 74 } 75 76 public void parse(InputSource source, ContentHandler handler, ErrorHandler errorHandler, EntityResolver entityResolver) 77 78 throws SAXException, IOException { 79 String systemId = source.getSystemId(); 80 Document dom = forest.get(systemId); 81 82 if (dom == null) { 83 // if no DOM tree is built for it, 84 // let the fall back parser parse the original document. 85 // 86 // for example, XSOM parses datatypes.xsd (XML Schema part 2) 87 // but this will never be built into the forest. 88 fallbackParser.parse(source, handler, errorHandler, entityResolver); 89 return; 90 } 91 92 scanner.scan(dom, handler); 93 94 } 95 }