1 16 package org.springframework.webflow.engine.builder.xml; 17 18 import java.io.IOException ; 19 import java.io.InputStream ; 20 21 import javax.xml.parsers.DocumentBuilder ; 22 import javax.xml.parsers.DocumentBuilderFactory ; 23 import javax.xml.parsers.ParserConfigurationException ; 24 25 import org.apache.commons.logging.Log; 26 import org.apache.commons.logging.LogFactory; 27 import org.springframework.core.io.Resource; 28 import org.springframework.util.xml.SimpleSaxErrorHandler; 29 import org.w3c.dom.Document ; 30 import org.xml.sax.EntityResolver ; 31 import org.xml.sax.SAXException ; 32 33 45 public class DefaultDocumentLoader implements DocumentLoader { 46 47 private static final Log logger = LogFactory.getLog(DefaultDocumentLoader.class); 48 49 52 private static final String SCHEMA_LANGUAGE_ATTRIBUTE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; 53 54 57 private static final String XSD_SCHEMA_LANGUAGE = "http://www.w3.org/2001/XMLSchema"; 58 59 63 private boolean validating = true; 64 65 68 private EntityResolver entityResolver = new WebFlowEntityResolver(); 69 70 73 public boolean isValidating() { 74 return validating; 75 } 76 77 81 public void setValidating(boolean validating) { 82 this.validating = validating; 83 } 84 85 88 public EntityResolver getEntityResolver() { 89 return entityResolver; 90 } 91 92 98 public void setEntityResolver(EntityResolver entityResolver) { 99 this.entityResolver = entityResolver; 100 } 101 102 public Document loadDocument(Resource resource) throws IOException , ParserConfigurationException , SAXException { 103 InputStream is = null; 104 try { 105 is = resource.getInputStream(); 106 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 107 factory.setValidating(isValidating()); 108 factory.setNamespaceAware(true); 109 try { 110 factory.setAttribute(SCHEMA_LANGUAGE_ATTRIBUTE, XSD_SCHEMA_LANGUAGE); 111 } 112 catch (IllegalArgumentException ex) { 113 throw new IllegalStateException ("Unable to validate using XSD: Your JAXP provider [" + factory 114 + "] does not support XML Schema. " 115 + "Are you running on Java 1.4 or below with Apache Crimson? " 116 + "If so you must upgrade to Apache Xerces (or Java 5 or >) for full XSD support."); 117 } 118 DocumentBuilder docBuilder = factory.newDocumentBuilder(); 119 docBuilder.setErrorHandler(new SimpleSaxErrorHandler(logger)); 120 docBuilder.setEntityResolver(getEntityResolver()); 121 return docBuilder.parse(is); 122 } 123 finally { 124 if (is != null) { 125 is.close(); 126 } 127 } 128 } 129 } | Popular Tags |