1 package edu.internet2.middleware.shibboleth.common;
3 import java.io.InputStream;
4 import java.util.StringTokenizer;
6 import javax.servlet.ServletContext;
7 import javax.xml.parsers.SAXParser;
8 import javax.xml.parsers.SAXParserFactory;
10 import org.apache.commons.digester.Digester;
11 import org.xml.sax.InputSource;
12 import org.xml.sax.SAXException;
13 import org.xml.sax.XMLReader;
16 * This class is a jakarta Digester style parser that will pull schemas from /WEB-INF/schemas, if they
19 * @author Walter Hoehn wassa@columbia.edu
22 public class ServletDigester extends Digester {
24 ServletContext context;
26 public ServletDigester() {
31 public ServletDigester(ServletContext context) {
33 this.context = context;
37 public ServletDigester(SAXParser parser) {
42 public ServletDigester(XMLReader reader) {
48 * @see org.xml.sax.EntityResolver#resolveEntity(String, String)
50 public InputSource resolveEntity(String publicId, String systemId)
53 if (context != null && systemId != null) {
54 StringTokenizer tokenString = new StringTokenizer(systemId, "/");
56 while (tokenString.hasMoreTokens()) {
57 xsdFile = tokenString.nextToken();
59 if (xsdFile.endsWith(".xsd")) {
61 context.getResourceAsStream("/WEB-INF/schemas/" + xsdFile);
63 return new InputSource(stream);
72 * Return the SAXParser we will use to parse the input stream. If there
73 * is a problem creating the parser, return <code>null</code>.
75 public SAXParser getParser() {
77 // Return the parser we already created (if any)
82 // Create and return a new parser
85 if (factory == null) {
86 factory = SAXParserFactory.newInstance();
88 factory.setNamespaceAware(namespaceAware);
89 factory.setValidating(validating);
91 factory.setFeature("http://xml.org/sax/features/namespaces", true);
92 factory.setFeature("http://xml.org/sax/features/validation", true);
93 factory.setFeature("http://apache.org/xml/features/validation/schema", true);
94 factory.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);
96 parser = factory.newSAXParser();
98 } catch (Exception e) {