| /******************************************************************************* |
| * Copyright (c) 2001, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.j2ee.internal.xml; |
| |
| import java.lang.reflect.InvocationTargetException; |
| |
| import org.eclipse.jem.util.logger.proxy.Logger; |
| import org.w3c.dom.Document; |
| import org.xml.sax.EntityResolver; |
| import org.xml.sax.ErrorHandler; |
| import org.xml.sax.InputSource; |
| import org.xml.sax.SAXException; |
| import org.xml.sax.SAXParseException; |
| /** |
| * Insert the type's description here. |
| * Creation date: (4/11/2001 11:58:50 AM) |
| * @author: Administrator |
| */ |
| public class GeneralXmlDocumentReader |
| { |
| protected InputSource inputSource; |
| protected EntityResolver entityResolver; |
| protected ErrorHandler errorHandler; |
| protected boolean doValidate = false; |
| protected boolean doAllowJavaEncodings = false; |
| |
| /** |
| * GeneralXmlDocumentReader constructor comment. |
| */ |
| public GeneralXmlDocumentReader() |
| { |
| super(); |
| } |
| /** |
| * GeneralXmlDocumentReader constructor comment. |
| */ |
| public GeneralXmlDocumentReader(InputSource source) |
| { |
| super(); |
| setInputSource(source); |
| } |
| /** |
| * GeneralXmlDocumentReader constructor comment. |
| */ |
| public GeneralXmlDocumentReader(InputSource source, EntityResolver resolver, ErrorHandler handler) |
| { |
| super(); |
| setInputSource(source); |
| setEntityResolver(resolver); |
| setErrorHandler(handler); |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @return org.xml.sax.EntityResolver |
| */ |
| protected org.xml.sax.EntityResolver createDefaultEntityResolver() |
| { |
| return null; |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @return org.xml.sax.ErrorHandler |
| */ |
| protected org.xml.sax.ErrorHandler createDefaultErrorHandler() |
| { |
| return new ErrorHandler() { |
| /* (non-Javadoc) |
| * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException) |
| */ |
| public void error(SAXParseException exception) throws SAXException { |
| throw exception; |
| } |
| /* (non-Javadoc) |
| * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException) |
| */ |
| public void fatalError(SAXParseException exception) throws SAXException { |
| throw exception; |
| } |
| /* (non-Javadoc) |
| * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException) |
| */ |
| public void warning(SAXParseException exception) throws SAXException { |
| Logger.getLogger().logWarning(exception); |
| } |
| }; |
| } |
| protected javax.xml.parsers.DocumentBuilder createNewDOMParser() |
| { |
| try |
| { |
| javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance(); |
| setFeatures(dbf); |
| return dbf.newDocumentBuilder(); |
| |
| } |
| catch (Exception ie) |
| { |
| handleException(J2EEXMLResourceHandler.getString("failed_instantiating_EXC_", (new Object[] {"Failed to instantiate parser"})), ie); //$NON-NLS-1$ //$NON-NLS-2$ = "Failed instantiating: " |
| } |
| return null; |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:01:34 PM) |
| * @return boolean |
| */ |
| public boolean doAllowJavaEncodings() |
| { |
| return doAllowJavaEncodings; |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:01:34 PM) |
| * @return boolean |
| */ |
| public boolean doValidate() |
| { |
| return doValidate; |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 1:34:14 PM) |
| * @return java.lang.ClassLoader |
| */ |
| public java.lang.ClassLoader getClassLoader() |
| { |
| ClassLoader cl = getClass().getClassLoader(); |
| if (cl == null) |
| cl = Thread.currentThread().getContextClassLoader(); |
| if (cl == null) |
| cl = ClassLoader.getSystemClassLoader(); |
| |
| return cl; |
| } |
| public Document getDocument() |
| { |
| return parseDocument(); |
| } |
| |
| protected Document getDocument(javax.xml.parsers.DocumentBuilder domParser) |
| { |
| return domParser.newDocument(); |
| } |
| |
| |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @return org.xml.sax.EntityResolver |
| */ |
| public org.xml.sax.EntityResolver getEntityResolver() |
| { |
| if (entityResolver == null) |
| entityResolver = createDefaultEntityResolver(); |
| return entityResolver; |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @return org.xml.sax.ErrorHandler |
| */ |
| public org.xml.sax.ErrorHandler getErrorHandler() |
| { |
| if (errorHandler == null) |
| { |
| errorHandler = createDefaultErrorHandler(); |
| } |
| return errorHandler; |
| } |
| |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @return org.xml.sax.InputSource |
| */ |
| public org.xml.sax.InputSource getInputSource() |
| { |
| return inputSource; |
| } |
| |
| protected void handleException(String aMessage, Throwable anException) |
| { |
| if (anException instanceof InvocationTargetException) |
| { |
| InvocationTargetException invocationEx = |
| (InvocationTargetException) anException; |
| if (invocationEx.getTargetException() != null) |
| handleException(aMessage, invocationEx.getTargetException()); |
| } |
| else |
| primHandleException(aMessage, anException); |
| } |
| |
| protected Document parse(javax.xml.parsers.DocumentBuilder domParser, InputSource is) |
| { |
| try |
| { |
| return domParser.parse(is); |
| } |
| catch (org.xml.sax.SAXException ex) |
| { |
| handleException(J2EEXMLResourceHandler.getString("failed_instantiating_EXC_", (new Object[] {"SAX Parser error"})), ex); //$NON-NLS-1$ //$NON-NLS-2$ = "Failed instantiating: " |
| |
| } |
| catch (java.io.IOException ex) |
| { |
| handleException(J2EEXMLResourceHandler.getString("failed_instantiating_EXC_", (new Object[] {"IO Exception on input stream"})), ex); //$NON-NLS-1$ //$NON-NLS-2$ = "Failed instantiating: " |
| } |
| return null; |
| } |
| |
| |
| public Document parseDocument() |
| { |
| ClassLoader prevClassLoader = Thread.currentThread().getContextClassLoader(); |
| try { |
| Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); |
| javax.xml.parsers.DocumentBuilder parser = createNewDOMParser(); |
| setEntityResolver(parser); |
| setErrorHandler(parser); |
| return parse(parser, getInputSource()); |
| } finally { |
| Thread.currentThread().setContextClassLoader(prevClassLoader); |
| } |
| |
| |
| |
| |
| |
| } |
| |
| protected void primHandleException(String aMessage, Throwable anException) |
| { |
| org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(anException); |
| throw new RuntimeException(aMessage); |
| |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:01:34 PM) |
| * @param newAllowJavaEncodings boolean |
| */ |
| public void setAllowJavaEncodings(boolean newAllowJavaEncodings) |
| { |
| doAllowJavaEncodings = newAllowJavaEncodings; |
| } |
| |
| protected void setEntityResolver(javax.xml.parsers.DocumentBuilder domParser) |
| { |
| if (getEntityResolver() != null) |
| { |
| domParser.setEntityResolver(getEntityResolver()); |
| } |
| } |
| |
| |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @param newEntityResolver org.xml.sax.EntityResolver |
| */ |
| public void setEntityResolver(org.xml.sax.EntityResolver newEntityResolver) |
| { |
| entityResolver = newEntityResolver; |
| } |
| |
| |
| protected void setErrorHandler(javax.xml.parsers.DocumentBuilder domParser) |
| { |
| if (getErrorHandler() != null) |
| { |
| domParser.setErrorHandler(getErrorHandler()); |
| } |
| } |
| |
| |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @param newErrorHandler org.xml.sax.ErrorHandler |
| */ |
| public void setErrorHandler(org.xml.sax.ErrorHandler newErrorHandler) |
| { |
| errorHandler = newErrorHandler; |
| } |
| |
| protected void setFeatures(javax.xml.parsers.DocumentBuilderFactory domParser) |
| { |
| try { |
| domParser.setValidating(doValidate()); |
| domParser.setAttribute("http://apache.org/xml/features/allow-java-encodings", new Boolean(doAllowJavaEncodings())); //$NON-NLS-1$ |
| domParser.setExpandEntityReferences(true); |
| } catch(IllegalArgumentException e) { |
| //Ignore |
| } |
| } |
| |
| |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:04:18 PM) |
| * @param newInputSource org.xml.sax.InputSource |
| */ |
| public void setInputSource(org.xml.sax.InputSource newInputSource) |
| { |
| inputSource = newInputSource; |
| } |
| /** |
| * Insert the method's description here. |
| * Creation date: (4/11/2001 12:01:34 PM) |
| * @param newValidate boolean |
| */ |
| public void setValidate(boolean newValidate) |
| { |
| doValidate = newValidate; |
| } |
| } |
| |
| |