1 56 57 package org.jdom.adapters; 58 59 import java.io.*; 60 import java.lang.reflect.*; 61 62 import org.jdom.*; 63 import org.jdom.input.*; 64 import org.w3c.dom.Document ; 65 66 72 public class JAXPDOMAdapter extends AbstractDOMAdapter { 73 74 private static final String CVS_ID = 75 "@(#) $RCSfile: JAXPDOMAdapter.java,v $ $Revision: 1.12 $ $Date: 2004/02/06 09:28:31 $ $Name: $"; 76 77 89 public Document getDocument(InputStream in, boolean validate) 90 throws IOException, JDOMException { 91 92 try { 93 Class.forName("javax.xml.transform.Transformer"); 96 97 Class factoryClass = 99 Class.forName("javax.xml.parsers.DocumentBuilderFactory"); 100 101 Method newParserInstance = 103 factoryClass.getMethod("newInstance", null); 104 Object factory = newParserInstance.invoke(null, null); 105 106 Method setValidating = 108 factoryClass.getMethod("setValidating", 109 new Class []{boolean.class}); 110 setValidating.invoke(factory, 111 new Object []{new Boolean (validate)}); 112 113 Method setNamespaceAware = 115 factoryClass.getMethod("setNamespaceAware", 116 new Class []{boolean.class}); 117 setNamespaceAware.invoke(factory, 118 new Object []{Boolean.TRUE}); 119 120 Method newDocBuilder = 122 factoryClass.getMethod("newDocumentBuilder", null); 123 Object jaxpParser = newDocBuilder.invoke(factory, null); 124 125 Class parserClass = jaxpParser.getClass(); 127 Method setErrorHandler = 128 parserClass.getMethod("setErrorHandler", 129 new Class []{org.xml.sax.ErrorHandler .class}); 130 setErrorHandler.invoke(jaxpParser, 131 new Object []{new BuilderErrorHandler()}); 132 133 Method parse = parserClass.getMethod( 135 "parse", new Class []{InputStream.class}); 136 org.w3c.dom.Document domDoc = (org.w3c.dom.Document ) 137 parse.invoke(jaxpParser, new Object []{in}); 138 139 return domDoc; 140 } catch (InvocationTargetException e) { 141 Throwable targetException = e.getTargetException(); 142 if (targetException instanceof IOException) { 143 throw (IOException) targetException; 144 } else { 145 throw new JDOMException(targetException.getMessage(), targetException); 146 } 147 } catch (Exception e) { 148 throw new JDOMException("Reflection failed while parsing a document with JAXP", e); 149 } 150 151 } 153 154 161 public Document createDocument() 162 throws JDOMException { 163 164 try { 165 Class.forName("javax.xml.transform.Transformer"); 168 169 Class factoryClass = 171 Class.forName("javax.xml.parsers.DocumentBuilderFactory"); 172 173 Method newParserInstance = 175 factoryClass.getMethod("newInstance", null); 176 Object factory = newParserInstance.invoke(null, null); 177 178 Method newDocBuilder = 180 factoryClass.getMethod("newDocumentBuilder", null); 181 Object jaxpParser = newDocBuilder.invoke(factory, null); 182 183 Class parserClass = jaxpParser.getClass(); 185 Method newDoc = parserClass.getMethod("newDocument", null); 186 org.w3c.dom.Document domDoc = 187 (org.w3c.dom.Document ) newDoc.invoke(jaxpParser, null); 188 189 return domDoc; 190 } catch (Exception e) { 191 throw new JDOMException("Reflection failed while creating new JAXP document", e); 192 } 193 194 } 195 } 196 | Popular Tags |