1 21 package oracle.toplink.essentials.platform.xml.jaxp; 23 24 import java.io.File ; 25 import java.io.InputStream ; 26 import java.io.IOException ; 27 import java.io.Reader ; 28 import java.net.URL ; 29 import javax.xml.parsers.DocumentBuilder ; 30 import javax.xml.parsers.DocumentBuilderFactory ; 31 import javax.xml.parsers.ParserConfigurationException ; 32 import javax.xml.transform.Source ; 33 import javax.xml.transform.Transformer ; 34 import javax.xml.transform.TransformerException ; 35 import javax.xml.transform.TransformerFactory ; 36 import javax.xml.transform.dom.DOMResult ; 37 import org.w3c.dom.Document ; 38 import org.xml.sax.EntityResolver ; 39 import org.xml.sax.ErrorHandler ; 40 import org.xml.sax.InputSource ; 41 import org.xml.sax.SAXException ; 42 import org.xml.sax.SAXParseException ; 43 import oracle.toplink.essentials.platform.xml.XMLParser; 44 import oracle.toplink.essentials.platform.xml.XMLPlatformException; 45 46 public class JAXPParser implements XMLParser { 47 private static final String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; 48 private static final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; 49 private static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; 50 private DocumentBuilderFactory documentBuilderFactory; 51 private EntityResolver entityResolver; 52 private ErrorHandler errorHandler; 53 54 public JAXPParser() { 55 super(); 56 documentBuilderFactory = DocumentBuilderFactory.newInstance(); 57 setNamespaceAware(true); 58 setWhitespacePreserving(false); 59 } 60 61 public void setNamespaceAware(boolean isNamespaceAware) { 62 documentBuilderFactory.setNamespaceAware(isNamespaceAware); 63 } 64 65 public void setWhitespacePreserving(boolean isWhitespacePreserving) { 66 documentBuilderFactory.setIgnoringElementContentWhitespace(!isWhitespacePreserving); 67 } 68 69 public int getValidationMode() { 70 if (!documentBuilderFactory.isValidating()) { 71 return XMLParser.NONVALIDATING; 72 } 73 74 try { 75 if (null == documentBuilderFactory.getAttribute(SCHEMA_LANGUAGE)) { 76 return XMLParser.DTD_VALIDATION; 77 } 78 } catch (IllegalArgumentException e) { 79 return XMLParser.DTD_VALIDATION; 80 } 81 82 return XMLParser.SCHEMA_VALIDATION; 83 } 84 85 public void setValidationMode(int validationMode) { 86 switch (validationMode) { 87 case XMLParser.NONVALIDATING: { 88 documentBuilderFactory.setValidating(false); 89 return; 91 } 92 case XMLParser.DTD_VALIDATION: { 93 documentBuilderFactory.setValidating(true); 94 return; 96 } 97 case XMLParser.SCHEMA_VALIDATION: { 98 try { 99 documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA); 100 documentBuilderFactory.setValidating(true); 101 } catch (IllegalArgumentException e) { 102 } 105 return; 106 } 107 } 108 } 109 110 public EntityResolver getEntityResolver() { 111 return entityResolver; 112 } 113 114 public void setEntityResolver(EntityResolver entityResolver) { 115 this.entityResolver = entityResolver; 116 } 117 118 public ErrorHandler getErrorHandler() { 119 return errorHandler; 120 } 121 122 public void setErrorHandler(ErrorHandler errorHandler) { 123 this.errorHandler = errorHandler; 124 } 125 126 public void setXMLSchema(URL url) throws XMLPlatformException { 127 if (null == url) { 128 return; 129 } 130 try { 131 documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA); 132 documentBuilderFactory.setAttribute(JAXP_SCHEMA_SOURCE, url.toString()); 133 } catch (IllegalArgumentException e) { 134 } catch (Exception e) { 136 XMLPlatformException.xmlPlatformErrorResolvingXMLSchema(url, e); 137 } 138 } 139 140 public void setXMLSchemas(Object [] schemas) throws XMLPlatformException { 141 if ((null == schemas) || (schemas.length == 0)) { 142 return; 143 } 144 try { 145 documentBuilderFactory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA); 146 documentBuilderFactory.setAttribute(JAXP_SCHEMA_SOURCE, schemas); 147 } catch (IllegalArgumentException e) { 148 } catch (Exception e) { 150 XMLPlatformException.xmlPlatformErrorResolvingXMLSchemas(schemas, e); 151 } 152 } 153 154 public Document parse(InputSource inputSource) throws XMLPlatformException { 155 try { 156 return getDocumentBuilder().parse(inputSource); 157 } catch (SAXException e) { 158 throw XMLPlatformException.xmlPlatformParseException(e); 159 } catch (IOException e) { 160 throw XMLPlatformException.xmlPlatformParseException(e); 161 } 162 } 163 164 public Document parse(File file) throws XMLPlatformException { 165 try { 166 return getDocumentBuilder().parse(file); 167 } catch (SAXParseException e) { 168 throw XMLPlatformException.xmlPlatformSAXParseException(e); 169 } catch (SAXException e) { 170 throw XMLPlatformException.xmlPlatformParseException(e); 171 } catch (IOException e) { 172 throw XMLPlatformException.xmlPlatformFileNotFoundException(file, e); 173 } 174 } 175 176 public Document parse(InputStream inputStream) throws XMLPlatformException { 177 try { 178 return getDocumentBuilder().parse(inputStream); 179 } catch (SAXParseException e) { 180 throw XMLPlatformException.xmlPlatformSAXParseException(e); 181 } catch (SAXException e) { 182 throw XMLPlatformException.xmlPlatformParseException(e); 183 } catch (IOException e) { 184 throw XMLPlatformException.xmlPlatformParseException(e); 185 } 186 } 187 188 public Document parse(Reader reader) throws XMLPlatformException { 189 InputSource inputSource = new InputSource (reader); 190 return parse(inputSource); 191 } 192 193 public Document parse(Source source) throws XMLPlatformException { 194 try { 195 TransformerFactory transformerFactory = TransformerFactory.newInstance(); 196 Transformer transformer = transformerFactory.newTransformer(); 197 DOMResult domResult = new DOMResult (); 198 transformer.transform(source, domResult); 199 return (Document )domResult.getNode(); 200 } catch (TransformerException e) { 201 throw XMLPlatformException.xmlPlatformParseException(e); 202 } 203 } 204 205 public Document parse(URL url) throws XMLPlatformException { 206 try { 207 InputStream inputStream = url.openStream(); 208 return parse(inputStream); 209 } catch (IOException e) { 210 throw XMLPlatformException.xmlPlatformParseException(e); 211 } 212 } 213 214 private DocumentBuilder getDocumentBuilder() { 215 try { 216 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 217 documentBuilder.setEntityResolver(entityResolver); 218 documentBuilder.setErrorHandler(errorHandler); 219 return documentBuilder; 220 } catch (ParserConfigurationException e) { 221 throw XMLPlatformException.xmlPlatformParseException(e); 222 } 223 } 224 } 225 | Popular Tags |