|
What this is
Other links
The source code/* * Copyright 1999-2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jasper.compiler; import java.io.CharArrayWriter; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.Hashtable; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.w3c.dom.Document; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * This class has all the utility method(s). * Ideally should move all the bean containers here. * * @author Mandar Raje. * @author Rajiv Mordani. */ public class JspUtil { private static final String OPEN_EXPR = "<%="; private static final String CLOSE_EXPR = "%>"; public static char[] removeQuotes(char []chars) { CharArrayWriter caw = new CharArrayWriter(); try { for (int i = 0; i < chars.length; i++) { if (chars[i] == '%' && chars[i+1] == '\\' && chars[i+2] == '\\' && chars[i+3] == '>') { caw.write('%'); caw.write('>'); i = i + 3; } else caw.write(chars[i]); } } catch( Exception ex ) {} return caw.toCharArray(); } // Checks if the token is a runtime expression. public static boolean isExpression (String token) { if (token.startsWith(OPEN_EXPR) && token.endsWith(CLOSE_EXPR)) { return true; } return false; } // Returns the "expression" part -- takin <%= and %> out. public static String getExpr (String expression) { String returnString; int length = expression.length(); if (expression.startsWith(OPEN_EXPR) && expression.endsWith(CLOSE_EXPR)) { returnString = expression.substring (OPEN_EXPR.length(), length - CLOSE_EXPR.length()); } else { returnString = ""; } return returnString; } // Parses the XML document contained in the InputStream. public static Document parseXMLDoc(InputStream in, String dtdResource, String dtdId) throws JasperException { return parseXMLDocJaxp(in, dtdResource, dtdId ); } // Parses the XML document contained in the InputStream. public static Document parseXMLDocJaxp(InputStream in, String dtdResource, String dtdId) throws JasperException { try { Document tld; DocumentBuilderFactory docFactory = DocumentBuilderFactory. newInstance(); docFactory.setValidating(true); docFactory.setNamespaceAware(true); DocumentBuilder builder = docFactory.newDocumentBuilder(); /*** * These lines make sure that we have an internal catalog entry for * the taglib.dtdfile; this is so that jasper can run standalone * without running out to the net to pick up the taglib.dtd file. */ MyEntityResolver resolver = new MyEntityResolver(dtdId, dtdResource); builder.setEntityResolver(resolver); tld = builder.parse(in); return tld; } catch( ParserConfigurationException ex ) { ex.printStackTrace(); throw new JasperException(Constants. getString("jsp.error.parse.error.in.TLD", new Object[] { ex.getMessage() })); } catch ( SAXException sx ) { throw new JasperException(Constants. getString("jsp.error.parse.error.in.TLD", new Object[] { sx.getMessage() })); } catch (IOException io) { throw new JasperException(Constants. getString("jsp.error.unable.to.open.TLD", new Object[] { io.getMessage() })); } } public static void checkAttributes (String typeOfTag, Hashtable attrs, ValidAttribute[] validAttributes, Mark start) throws JasperException { boolean valid = true; Hashtable temp = (Hashtable)attrs.clone (); /** * First check to see if all the mandatory attributes are present. * If so only then proceed to see if the other attributes are valid * for the particular tag. */ String missingAttribute = null; for (int i = 0; i < validAttributes.length; i++) { if (validAttributes[i].mandatory) { if (temp.get (validAttributes[i].name) != null) { temp.remove (validAttributes[i].name); valid = true; } else { valid = false; missingAttribute = validAttributes[i].name; break; } } } /** * If mandatory attribute is missing then the exception is thrown. */ if (!valid) throw new ParseException(start, Constants.getString( "jsp.error.mandatory.attribute", new Object[] { typeOfTag, missingAttribute})); /** * Check to see if there are any more attributes for the specified * tag. */ if (temp.size() == 0) return; /** * Now check to see if the rest of the attributes are valid too. */ Enumeration enum = temp.keys (); String attribute = null; while (enum.hasMoreElements ()) { valid = false; attribute = (String) enum.nextElement (); for (int i = 0; i < validAttributes.length; i++) { if (attribute.equals(validAttributes[i].name)) { valid = true; break; } } if (!valid) throw new ParseException(start, Constants.getString( "jsp.error.invalid.attribute", new Object[] { typeOfTag, attribute })); } } public static String escapeQueryString(String unescString) { if ( unescString == null ) return null; String escString = ""; String shellSpChars = "\\\""; for(int index=0; index |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.