1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package edu.internet2.middleware.shibboleth.common.config;
19
20 import javax.xml.parsers.DocumentBuilder;
21 import javax.xml.parsers.DocumentBuilderFactory;
22
23 import org.opensaml.xml.parse.ClasspathResolver;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26 import org.springframework.beans.factory.xml.DocumentLoader;
27 import org.w3c.dom.Document;
28 import org.xml.sax.EntityResolver;
29 import org.xml.sax.ErrorHandler;
30 import org.xml.sax.InputSource;
31 import org.xml.sax.SAXException;
32 import org.xml.sax.SAXParseException;
33
34
35
36
37 public class SpringDocumentLoader implements DocumentLoader {
38
39
40 private final Logger log = LoggerFactory.getLogger(SpringDocumentLoader.class);
41
42
43 public Document loadDocument(InputSource inputSource, EntityResolver entityResolver, ErrorHandler errorHandler,
44 int validationMode, boolean namespaceAware) throws Exception {
45 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
46 factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
47 "http://www.w3.org/2001/XMLSchema");
48 factory.setCoalescing(true);
49 factory.setIgnoringComments(true);
50 factory.setNamespaceAware(true);
51 factory.setValidating(true);
52
53 DocumentBuilder builder = factory.newDocumentBuilder();
54 builder.setErrorHandler(new LoggingErrorHandler(log));
55 builder.setEntityResolver(new ClasspathResolver());
56 return builder.parse(inputSource);
57 }
58
59
60
61
62 public class LoggingErrorHandler implements ErrorHandler{
63
64
65 private Logger log;
66
67
68
69
70
71
72 public LoggingErrorHandler(Logger logger){
73 log = logger;
74 }
75
76
77 public void error(SAXParseException exception) throws SAXException {
78 log.trace("Error parsing XML", exception);
79 throw exception;
80 }
81
82
83 public void fatalError(SAXParseException exception) throws SAXException {
84 log.trace("Fatal XML parsing XML error", exception);
85 throw exception;
86 }
87
88
89 public void warning(SAXParseException exception) throws SAXException {
90 log.trace("XML parsing warning", exception);
91 throw exception;
92 }
93 }
94 }