01: /*
02: * Copyright (c) 1998-2003 Caucho Technology -- all rights reserved
03: *
04: * This file is part of Resin(R) Open Source
05: *
06: * Each copy or derived work must preserve the copyright notice and this
07: * notice unmodified.
08: *
09: * Resin Open Source is free software; you can redistribute it and/or modify
10: * it under the terms of the GNU General Public License as published by
11: * the Free Software Foundation; either version 2 of the License, or
12: * (at your option) any later version.
13: *
14: * Resin Open Source is distributed in the hope that it will be useful,
15: * but WITHOUT ANY WARRANTY; without even the implied warranty of
16: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17: * of NON-INFRINGEMENT. See the GNU General Public License for more
18: * details.
19: *
20: * You should have received a copy of the GNU General Public License
21: * along with Resin Open Source; if not, write to the
22: * Free SoftwareFoundation, Inc.
23: * 59 Temple Place, Suite 330
24: * Boston, MA 02111-1307 USA
25: *
26: * @author Scott Ferguson
27: */
28:
29: package javax.servlet.jsp.jstl.tlv;
30:
31: import java.io.*;
32: import java.util.*;
33: import javax.servlet.jsp.tagext.*;
34: import javax.xml.parsers.*;
35: import org.xml.sax.*;
36: import org.xml.sax.helpers.*;
37:
38: public class PermittedTaglibsTLV extends TagLibraryValidator {
39: private HashSet<String> _permitted;
40:
41: public ValidationMessage[] validate(String prefix, String uri,
42: PageData data) {
43: Map init = getInitParameters();
44:
45: String permitted = (String) init.get("permittedTaglibs");
46:
47: if (permitted == null || "".equals(permitted))
48: return null;
49:
50: _permitted = new HashSet<String>();
51:
52: _permitted.add("http://java.sun.com/JSP/Page");
53:
54: String[] values = permitted.split("[ \t\n\r]+");
55:
56: for (int i = 0; i < values.length; i++) {
57: String permittedUri = values[i].trim();
58:
59: if (!"".equals(permittedUri))
60: _permitted.add(permittedUri);
61: }
62:
63: try {
64: InputStream is = data.getInputStream();
65:
66: SAXParserFactory factory = SAXParserFactory.newInstance();
67: factory.setNamespaceAware(true);
68: SAXParser parser = factory.newSAXParser();
69:
70: DefaultHandler handler = new Handler();
71:
72: parser.parse(is, handler);
73: } catch (Exception e) {
74: return new ValidationMessage[] { new ValidationMessage("",
75: e.getMessage()) };
76: }
77:
78: return null;
79: }
80:
81: private class Handler extends DefaultHandler {
82: public void startElement(String uri, String localName,
83: String qName, Attributes attributes)
84: throws SAXException {
85: if (uri != null && !"".equals(uri)
86: && !_permitted.contains(uri)) {
87: throw new SAXException(uri
88: + " is not a permitted tag library");
89: }
90: }
91: }
92: }
|