You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ec...@apache.org on 2003/09/01 02:17:35 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler JspDocumentParser.java
ecarmich 2003/08/31 17:17:35
Modified: jasper2/src/share/org/apache/jasper/compiler
JspDocumentParser.java
Log:
Expand wildcard imports
Remove unused imports
Remove tabs
Revision Changes Path
1.69 +874 -644 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java
Index: JspDocumentParser.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -r1.68 -r1.69
--- JspDocumentParser.java 29 Aug 2003 19:31:22 -0000 1.68
+++ JspDocumentParser.java 1 Sep 2003 00:17:35 -0000 1.69
@@ -57,22 +57,33 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
- */
+ */
package org.apache.jasper.compiler;
-import java.io.*;
-import java.util.*;
+import java.io.CharArrayWriter;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
import java.util.jar.JarFile;
-import javax.servlet.jsp.tagext.*;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.ParserConfigurationException;
+
+import javax.servlet.jsp.tagext.TagFileInfo;
+import javax.servlet.jsp.tagext.TagInfo;
+import javax.servlet.jsp.tagext.TagLibraryInfo;
import javax.xml.parsers.SAXParser;
-import org.xml.sax.*;
-import org.xml.sax.ext.LexicalHandler;
-import org.xml.sax.helpers.DefaultHandler;
-import org.xml.sax.helpers.AttributesImpl;
+import javax.xml.parsers.SAXParserFactory;
+
import org.apache.jasper.JasperException;
import org.apache.jasper.JspCompilationContext;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.helpers.DefaultHandler;
/**
* Class implementing a parser for a JSP document, that is, a JSP page in XML
@@ -81,19 +92,21 @@
* @author Jan Luehe
*/
-class JspDocumentParser extends DefaultHandler
- implements LexicalHandler, TagConstants {
+class JspDocumentParser
+ extends DefaultHandler
+ implements LexicalHandler, TagConstants {
private static final String JSP_VERSION = "version";
- private static final String LEXICAL_HANDLER_PROPERTY
- = "http://xml.org/sax/properties/lexical-handler";
+ private static final String LEXICAL_HANDLER_PROPERTY =
+ "http://xml.org/sax/properties/lexical-handler";
- private static final EnableDTDValidationException ENABLE_DTD_VALIDATION_EXCEPTION
- = new EnableDTDValidationException("jsp.error.enable_dtd_validation",
- null);
+ private static final EnableDTDValidationException ENABLE_DTD_VALIDATION_EXCEPTION =
+ new EnableDTDValidationException(
+ "jsp.error.enable_dtd_validation",
+ null);
private ParserController parserController;
- private JspCompilationContext ctxt;
+ private JspCompilationContext ctxt;
private PageInfo pageInfo;
private String path;
@@ -115,11 +128,12 @@
/*
* Constructor
*/
- public JspDocumentParser(ParserController pc,
- String path,
- JarFile jarFile,
- boolean isTagFile,
- boolean directivesOnly) {
+ public JspDocumentParser(
+ ParserController pc,
+ String path,
+ JarFile jarFile,
+ boolean isTagFile,
+ boolean directivesOnly) {
this.parserController = pc;
this.ctxt = pc.getJspCompilationContext();
this.pageInfo = pc.getCompiler().getPageInfo();
@@ -135,77 +149,82 @@
*
* @throws JasperException
*/
- public static Node.Nodes parse(ParserController pc,
- String path,
- JarFile jarFile,
- Node parent,
- boolean isTagFile,
- boolean directivesOnly,
- String pageEnc,
- String jspConfigPageEnc,
- boolean isEncodingSpecifiedInProlog)
- throws JasperException {
-
- JspDocumentParser jspDocParser = new JspDocumentParser(pc,
- path,
- jarFile,
- isTagFile,
- directivesOnly);
- Node.Nodes pageNodes = null;
-
- try {
-
- // Create dummy root and initialize it with given page encodings
- Node.Root dummyRoot = new Node.Root(null, parent, true);
- dummyRoot.setPageEncoding(pageEnc);
- dummyRoot.setJspConfigPageEncoding(jspConfigPageEnc);
- dummyRoot.setIsEncodingSpecifiedInProlog(isEncodingSpecifiedInProlog);
- jspDocParser.current = dummyRoot;
- if (parent == null) {
- jspDocParser.addInclude(dummyRoot,
- jspDocParser.pageInfo.getIncludePrelude());
- } else {
- jspDocParser.isTop = false;
- }
+ public static Node.Nodes parse(
+ ParserController pc,
+ String path,
+ JarFile jarFile,
+ Node parent,
+ boolean isTagFile,
+ boolean directivesOnly,
+ String pageEnc,
+ String jspConfigPageEnc,
+ boolean isEncodingSpecifiedInProlog)
+ throws JasperException {
+
+ JspDocumentParser jspDocParser =
+ new JspDocumentParser(pc, path, jarFile, isTagFile, directivesOnly);
+ Node.Nodes pageNodes = null;
+
+ try {
+
+ // Create dummy root and initialize it with given page encodings
+ Node.Root dummyRoot = new Node.Root(null, parent, true);
+ dummyRoot.setPageEncoding(pageEnc);
+ dummyRoot.setJspConfigPageEncoding(jspConfigPageEnc);
+ dummyRoot.setIsEncodingSpecifiedInProlog(
+ isEncodingSpecifiedInProlog);
+ jspDocParser.current = dummyRoot;
+ if (parent == null) {
+ jspDocParser.addInclude(
+ dummyRoot,
+ jspDocParser.pageInfo.getIncludePrelude());
+ } else {
+ jspDocParser.isTop = false;
+ }
- // Parse the input
+ // Parse the input
SAXParser saxParser = getSAXParser(false, jspDocParser);
try {
- saxParser.parse(jspDocParser.getInputSource(
- path,
- jarFile,
- jspDocParser.ctxt,
- jspDocParser.err),
- jspDocParser);
+ saxParser.parse(
+ jspDocParser.getInputSource(
+ path,
+ jarFile,
+ jspDocParser.ctxt,
+ jspDocParser.err),
+ jspDocParser);
} catch (EnableDTDValidationException e) {
saxParser = getSAXParser(true, jspDocParser);
jspDocParser.isValidating = true;
- saxParser.parse(jspDocParser.getInputSource(
- path,
- jarFile,
- jspDocParser.ctxt,
- jspDocParser.err),
- jspDocParser);
- }
-
- if (parent == null) {
- jspDocParser.addInclude(dummyRoot,
- jspDocParser.pageInfo.getIncludeCoda());
- }
-
- // Create Node.Nodes from dummy root
- pageNodes = new Node.Nodes(dummyRoot);
-
- } catch (IOException ioe) {
- jspDocParser.err.jspError("jsp.error.data.file.read", path, ioe);
- } catch (Exception e) {
- jspDocParser.err.jspError(
- new Mark(path, ((SAXParseException) e).getLineNumber(),
- ((SAXParseException) e).getColumnNumber()),
+ saxParser.parse(
+ jspDocParser.getInputSource(
+ path,
+ jarFile,
+ jspDocParser.ctxt,
+ jspDocParser.err),
+ jspDocParser);
+ }
+
+ if (parent == null) {
+ jspDocParser.addInclude(
+ dummyRoot,
+ jspDocParser.pageInfo.getIncludeCoda());
+ }
+
+ // Create Node.Nodes from dummy root
+ pageNodes = new Node.Nodes(dummyRoot);
+
+ } catch (IOException ioe) {
+ jspDocParser.err.jspError("jsp.error.data.file.read", path, ioe);
+ } catch (Exception e) {
+ jspDocParser.err.jspError(
+ new Mark(
+ path,
+ ((SAXParseException)e).getLineNumber(),
+ ((SAXParseException)e).getColumnNumber()),
e.getMessage());
- }
+ }
- return pageNodes;
+ return pageNodes;
}
/*
@@ -215,20 +234,20 @@
* subelements of the jsp-config element in web.xml
*/
private void addInclude(Node parent, List files) throws SAXException {
- if (files != null) {
- Iterator iter = files.iterator();
- while (iter.hasNext()) {
- String file = (String) iter.next();
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "file", "file", "CDATA", file);
-
- // Create a dummy Include directive node
- Node includeDir = new Node.IncludeDirective(attrs,
- null, // XXX
- parent);
- processIncludeDirective(file, includeDir);
- }
- }
+ if (files != null) {
+ Iterator iter = files.iterator();
+ while (iter.hasNext()) {
+ String file = (String)iter.next();
+ AttributesImpl attrs = new AttributesImpl();
+ attrs.addAttribute("", "file", "file", "CDATA", file);
+
+ // Create a dummy Include directive node
+ Node includeDir =
+ new Node.IncludeDirective(attrs, null, // XXX
+ parent);
+ processIncludeDirective(file, includeDir);
+ }
+ }
}
/*
@@ -244,100 +263,123 @@
* corresponding TagLibraryInfo object is added to the set of custom
* tag libraries.
*/
- public void startElement(String uri,
- String localName,
- String qName,
- Attributes attrs) throws SAXException {
-
- AttributesImpl taglibAttrs = null;
- AttributesImpl nonTaglibAttrs = null;
- AttributesImpl nonTaglibXmlnsAttrs = null;
-
- checkPrefixes(uri, qName, attrs);
-
- if (directivesOnly && !localName.startsWith(DIRECTIVE_ACTION)) {
- return;
- }
-
- // jsp:text must not have any subelements
- if (TEXT_ACTION.equals(current.getLocalName())) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.text.has_subelement"),
- locator);
- }
-
- Mark start = new Mark(path, locator.getLineNumber(),
- locator.getColumnNumber());
-
- if (attrs != null) {
- /*
- * Notice that due to a bug in the underlying SAX parser, the
- * attributes must be enumerated in descending order.
- */
- boolean isTaglib = false;
- for (int i=attrs.getLength()-1; i>=0; i--) {
- isTaglib = false;
- String attrQName = attrs.getQName(i);
- if (!attrQName.startsWith("xmlns")) {
- if (nonTaglibAttrs == null) {
- nonTaglibAttrs = new AttributesImpl();
- }
- nonTaglibAttrs.addAttribute(attrs.getURI(i),
- attrs.getLocalName(i),
- attrs.getQName(i),
- attrs.getType(i),
- attrs.getValue(i));
- } else {
- if (attrQName.startsWith("xmlns:jsp")) {
- isTaglib = true;
- } else {
- String attrUri = attrs.getValue(i);
- // TaglibInfo for this uri already established in
- // startPrefixMapping
- isTaglib = pageInfo.hasTaglib(attrUri);
- }
- if (isTaglib) {
- if (taglibAttrs == null) {
- taglibAttrs = new AttributesImpl();
- }
- taglibAttrs.addAttribute(attrs.getURI(i),
- attrs.getLocalName(i),
- attrs.getQName(i),
- attrs.getType(i),
- attrs.getValue(i));
- } else {
- if (nonTaglibXmlnsAttrs == null) {
- nonTaglibXmlnsAttrs = new AttributesImpl();
- }
- nonTaglibXmlnsAttrs.addAttribute(attrs.getURI(i),
- attrs.getLocalName(i),
- attrs.getQName(i),
- attrs.getType(i),
- attrs.getValue(i));
- }
- }
- }
- }
-
- Node node = null;
-
- if ("http://java.sun.com/JSP/Page".equals(uri)) {
- node = parseStandardAction(qName, localName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else {
- node = parseCustomAction(qName, localName, uri, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs, start,
- current);
- if (node == null) {
- node = new Node.UninterpretedTag(qName, localName,
- nonTaglibAttrs,
- nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- }
- }
+ public void startElement(
+ String uri,
+ String localName,
+ String qName,
+ Attributes attrs)
+ throws SAXException {
+
+ AttributesImpl taglibAttrs = null;
+ AttributesImpl nonTaglibAttrs = null;
+ AttributesImpl nonTaglibXmlnsAttrs = null;
+
+ checkPrefixes(uri, qName, attrs);
+
+ if (directivesOnly && !localName.startsWith(DIRECTIVE_ACTION)) {
+ return;
+ }
+
+ // jsp:text must not have any subelements
+ if (TEXT_ACTION.equals(current.getLocalName())) {
+ throw new SAXParseException(
+ Localizer.getMessage("jsp.error.text.has_subelement"),
+ locator);
+ }
+
+ Mark start =
+ new Mark(path, locator.getLineNumber(), locator.getColumnNumber());
+
+ if (attrs != null) {
+ /*
+ * Notice that due to a bug in the underlying SAX parser, the
+ * attributes must be enumerated in descending order.
+ */
+ boolean isTaglib = false;
+ for (int i = attrs.getLength() - 1; i >= 0; i--) {
+ isTaglib = false;
+ String attrQName = attrs.getQName(i);
+ if (!attrQName.startsWith("xmlns")) {
+ if (nonTaglibAttrs == null) {
+ nonTaglibAttrs = new AttributesImpl();
+ }
+ nonTaglibAttrs.addAttribute(
+ attrs.getURI(i),
+ attrs.getLocalName(i),
+ attrs.getQName(i),
+ attrs.getType(i),
+ attrs.getValue(i));
+ } else {
+ if (attrQName.startsWith("xmlns:jsp")) {
+ isTaglib = true;
+ } else {
+ String attrUri = attrs.getValue(i);
+ // TaglibInfo for this uri already established in
+ // startPrefixMapping
+ isTaglib = pageInfo.hasTaglib(attrUri);
+ }
+ if (isTaglib) {
+ if (taglibAttrs == null) {
+ taglibAttrs = new AttributesImpl();
+ }
+ taglibAttrs.addAttribute(
+ attrs.getURI(i),
+ attrs.getLocalName(i),
+ attrs.getQName(i),
+ attrs.getType(i),
+ attrs.getValue(i));
+ } else {
+ if (nonTaglibXmlnsAttrs == null) {
+ nonTaglibXmlnsAttrs = new AttributesImpl();
+ }
+ nonTaglibXmlnsAttrs.addAttribute(
+ attrs.getURI(i),
+ attrs.getLocalName(i),
+ attrs.getQName(i),
+ attrs.getType(i),
+ attrs.getValue(i));
+ }
+ }
+ }
+ }
+
+ Node node = null;
+
+ if ("http://java.sun.com/JSP/Page".equals(uri)) {
+ node =
+ parseStandardAction(
+ qName,
+ localName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else {
+ node =
+ parseCustomAction(
+ qName,
+ localName,
+ uri,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ if (node == null) {
+ node =
+ new Node.UninterpretedTag(
+ qName,
+ localName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ }
+ }
- current = node;
+ current = node;
}
/*
@@ -349,145 +391,151 @@
*
* @throws SAXException
*/
- public void characters(char[] buf,
- int offset,
- int len) throws SAXException {
- /*
- * JSP.6.1.1: All textual nodes that have only white space are to be
- * dropped from the document, except for nodes in a jsp:text element,
- * and any leading and trailing white-space-only textual nodes in a
- * jsp:attribute whose 'trim' attribute is set to FALSE, which are to
- * be kept verbatim.
- * JSP.6.2.3 defines white space characters.
- */
- boolean isAllSpace = true;
- if (!(current instanceof Node.JspText)
- && !(current instanceof Node.NamedAttribute)) {
- for (int i=offset; i<offset+len; i++) {
- if (!(buf[i] == ' ' || buf[i] == '\n' || buf[i] == '\r' ||
- buf[i] == '\t' )) {
- isAllSpace = false;
- break;
- }
- }
- }
- if ((current instanceof Node.JspText)
- || (current instanceof Node.NamedAttribute) || !isAllSpace) {
- Mark start = new Mark(path, locator.getLineNumber(),
- locator.getColumnNumber());
-
- CharArrayWriter ttext = new CharArrayWriter();
- int limit = offset + len;
- int lastCh = 0;
- for (int i = offset; i < limit; i++) {
- int ch = buf[i];
- if (lastCh == '$' && ch == '{') {
- if (ttext.size() > 0) {
- new Node.TemplateText(ttext.toString(), start,
- current);
- ttext = new CharArrayWriter();
- }
- // following "${" to first unquoted "}"
- i++;
- boolean singleQ = false;
- boolean doubleQ = false;
- lastCh = 0;
- for (; ; i++) {
- if (i >= limit) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.unterminated",
- "${"),
- locator);
-
- }
- ch = buf[i];
- if (lastCh == '\\' && (singleQ || doubleQ)) {
- ttext.write(ch);
- lastCh = 0;
- continue;
- }
- if (ch == '}') {
- new Node.ELExpression(ttext.toString(), start,
- current);
- ttext = new CharArrayWriter();
- break;
- }
- if (ch == '"')
- doubleQ = !doubleQ;
- else if (ch == '\'')
- singleQ = !singleQ;
-
- ttext.write(ch);
- lastCh = ch;
- }
- } else {
- if( (lastCh == '$') && (ch != '{') ) {
- ttext.write( '$' );
+ public void characters(char[] buf, int offset, int len)
+ throws SAXException {
+ /*
+ * JSP.6.1.1: All textual nodes that have only white space are to be
+ * dropped from the document, except for nodes in a jsp:text element,
+ * and any leading and trailing white-space-only textual nodes in a
+ * jsp:attribute whose 'trim' attribute is set to FALSE, which are to
+ * be kept verbatim.
+ * JSP.6.2.3 defines white space characters.
+ */
+ boolean isAllSpace = true;
+ if (!(current instanceof Node.JspText)
+ && !(current instanceof Node.NamedAttribute)) {
+ for (int i = offset; i < offset + len; i++) {
+ if (!(buf[i] == ' '
+ || buf[i] == '\n'
+ || buf[i] == '\r'
+ || buf[i] == '\t')) {
+ isAllSpace = false;
+ break;
+ }
+ }
+ }
+ if ((current instanceof Node.JspText)
+ || (current instanceof Node.NamedAttribute)
+ || !isAllSpace) {
+ Mark start =
+ new Mark(
+ path,
+ locator.getLineNumber(),
+ locator.getColumnNumber());
+
+ CharArrayWriter ttext = new CharArrayWriter();
+ int limit = offset + len;
+ int lastCh = 0;
+ for (int i = offset; i < limit; i++) {
+ int ch = buf[i];
+ if (lastCh == '$' && ch == '{') {
+ if (ttext.size() > 0) {
+ new Node.TemplateText(ttext.toString(), start, current);
+ ttext = new CharArrayWriter();
+ }
+ // following "${" to first unquoted "}"
+ i++;
+ boolean singleQ = false;
+ boolean doubleQ = false;
+ lastCh = 0;
+ for (;; i++) {
+ if (i >= limit) {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.unterminated",
+ "${"),
+ locator);
+
+ }
+ ch = buf[i];
+ if (lastCh == '\\' && (singleQ || doubleQ)) {
+ ttext.write(ch);
+ lastCh = 0;
+ continue;
+ }
+ if (ch == '}') {
+ new Node.ELExpression(
+ ttext.toString(),
+ start,
+ current);
+ ttext = new CharArrayWriter();
+ break;
+ }
+ if (ch == '"')
+ doubleQ = !doubleQ;
+ else if (ch == '\'')
+ singleQ = !singleQ;
+
+ ttext.write(ch);
+ lastCh = ch;
}
- if( ch != '$' ) {
- ttext.write( ch );
+ } else {
+ if ((lastCh == '$') && (ch != '{')) {
+ ttext.write('$');
+ }
+ if (ch != '$') {
+ ttext.write(ch);
}
}
lastCh = ch;
- }
- if (lastCh == '$') {
- ttext.write('$');
- }
- if (ttext.size() > 0) {
- new Node.TemplateText(ttext.toString(), start, current);
- }
- }
+ }
+ if (lastCh == '$') {
+ ttext.write('$');
+ }
+ if (ttext.size() > 0) {
+ new Node.TemplateText(ttext.toString(), start, current);
+ }
+ }
}
/*
* Receives notification of the end of an element.
*/
- public void endElement(String uri,
- String localName,
- String qName) throws SAXException {
-
- if (directivesOnly && !localName.startsWith(DIRECTIVE_ACTION)) {
- return;
- }
-
- if (current instanceof Node.NamedAttribute) {
- boolean isTrim = ((Node.NamedAttribute) current).isTrim();
- Node.Nodes subElems = ((Node.NamedAttribute) current).getBody();
- for (int i=0; subElems != null && i<subElems.size(); i++) {
- Node subElem = subElems.getNode(i);
- if (!(subElem instanceof Node.TemplateText)) {
- continue;
- }
- // Ignore any whitespace (including spaces, carriage returns,
- // line feeds, and tabs, that appear at the beginning and at
- // the end of the body of the <jsp:attribute> action, if the
- // action's 'trim' attribute is set to TRUE (default).
- // In addition, any textual nodes in the <jsp:attribute> that
- // have only white space are dropped from the document, with
- // the exception of leading and trailing white-space-only
- // textual nodes in a <jsp:attribute> whose 'trim' attribute
- // is set to FALSE, which must be kept verbatim.
- if (i == 0) {
- if (isTrim) {
- ((Node.TemplateText) subElem).ltrim();
- }
- } else if (i == subElems.size()-1) {
- if (isTrim) {
- ((Node.TemplateText) subElem).rtrim();
- }
- } else {
- if (((Node.TemplateText) subElem).isAllSpace()) {
- subElems.remove(subElem);
- }
- }
- }
- } else if (current instanceof Node.ScriptingElement) {
- checkScriptingBody((Node.ScriptingElement) current);
- }
-
- if (current.getParent() != null) {
- current = current.getParent();
- }
+ public void endElement(String uri, String localName, String qName)
+ throws SAXException {
+
+ if (directivesOnly && !localName.startsWith(DIRECTIVE_ACTION)) {
+ return;
+ }
+
+ if (current instanceof Node.NamedAttribute) {
+ boolean isTrim = ((Node.NamedAttribute)current).isTrim();
+ Node.Nodes subElems = ((Node.NamedAttribute)current).getBody();
+ for (int i = 0; subElems != null && i < subElems.size(); i++) {
+ Node subElem = subElems.getNode(i);
+ if (!(subElem instanceof Node.TemplateText)) {
+ continue;
+ }
+ // Ignore any whitespace (including spaces, carriage returns,
+ // line feeds, and tabs, that appear at the beginning and at
+ // the end of the body of the <jsp:attribute> action, if the
+ // action's 'trim' attribute is set to TRUE (default).
+ // In addition, any textual nodes in the <jsp:attribute> that
+ // have only white space are dropped from the document, with
+ // the exception of leading and trailing white-space-only
+ // textual nodes in a <jsp:attribute> whose 'trim' attribute
+ // is set to FALSE, which must be kept verbatim.
+ if (i == 0) {
+ if (isTrim) {
+ ((Node.TemplateText)subElem).ltrim();
+ }
+ } else if (i == subElems.size() - 1) {
+ if (isTrim) {
+ ((Node.TemplateText)subElem).rtrim();
+ }
+ } else {
+ if (((Node.TemplateText)subElem).isAllSpace()) {
+ subElems.remove(subElem);
+ }
+ }
+ }
+ } else if (current instanceof Node.ScriptingElement) {
+ checkScriptingBody((Node.ScriptingElement)current);
+ }
+
+ if (current.getParent() != null) {
+ current = current.getParent();
+ }
}
/*
@@ -496,66 +544,69 @@
* @param locator the document locator
*/
public void setDocumentLocator(Locator locator) {
- this.locator = locator;
+ this.locator = locator;
}
/*
* See org.xml.sax.ext.LexicalHandler.
*/
public void comment(char[] buf, int offset, int len) throws SAXException {
- // ignore comments in the DTD
- if (!inDTD) {
- Mark start = new Mark(path, locator.getLineNumber(),
- locator.getColumnNumber());
- new Node.Comment(new String(buf, offset, len), start, current);
- }
+ // ignore comments in the DTD
+ if (!inDTD) {
+ Mark start =
+ new Mark(
+ path,
+ locator.getLineNumber(),
+ locator.getColumnNumber());
+ new Node.Comment(new String(buf, offset, len), start, current);
+ }
}
/*
* See org.xml.sax.ext.LexicalHandler.
*/
public void startCDATA() throws SAXException {
- // do nothing
+ // do nothing
}
/*
* See org.xml.sax.ext.LexicalHandler.
*/
public void endCDATA() throws SAXException {
- // do nothing
+ // do nothing
}
/*
* See org.xml.sax.ext.LexicalHandler.
*/
public void startEntity(String name) throws SAXException {
- // do nothing
+ // do nothing
}
/*
* See org.xml.sax.ext.LexicalHandler.
*/
public void endEntity(String name) throws SAXException {
- // do nothing
+ // do nothing
}
/*
* See org.xml.sax.ext.LexicalHandler.
*/
- public void startDTD(String name, String publicId,
- String systemId) throws SAXException {
+ public void startDTD(String name, String publicId, String systemId)
+ throws SAXException {
if (!isValidating) {
fatalError(ENABLE_DTD_VALIDATION_EXCEPTION);
}
-
- inDTD = true;
+
+ inDTD = true;
}
-
+
/*
* See org.xml.sax.ext.LexicalHandler.
*/
public void endDTD() throws SAXException {
- inDTD = false;
+ inDTD = false;
}
/*
@@ -576,14 +627,15 @@
* Receives notification of the start of a Namespace mapping.
*/
public void startPrefixMapping(String prefix, String uri)
- throws SAXException {
+ throws SAXException {
TagLibraryInfo taglibInfo;
try {
taglibInfo = getTaglibInfo(prefix, uri);
} catch (JasperException je) {
throw new SAXParseException(
Localizer.getMessage("jsp.error.could.not.add.taglibraries"),
- locator, je);
+ locator,
+ je);
}
if (taglibInfo != null) {
@@ -592,239 +644,399 @@
} else {
pageInfo.pushPrefixMapping(prefix, null);
}
- }
+ }
- /*
- * Receives notification of the end of a Namespace mapping.
- */
+ /*
+ * Receives notification of the end of a Namespace mapping.
+ */
public void endPrefixMapping(String prefix) throws SAXException {
pageInfo.popPrefixMapping(prefix);
}
-
//*********************************************************************
// Private utility methods
- private Node parseStandardAction(String qName, String localName,
- Attributes nonTaglibAttrs,
- Attributes nonTaglibXmlnsAttrs,
- Attributes taglibAttrs,
- Mark start, Node parent)
- throws SAXException {
+ private Node parseStandardAction(
+ String qName,
+ String localName,
+ Attributes nonTaglibAttrs,
+ Attributes nonTaglibXmlnsAttrs,
+ Attributes taglibAttrs,
+ Mark start,
+ Node parent)
+ throws SAXException {
- Node node = null;
+ Node node = null;
- if (localName.equals(ROOT_ACTION)) {
+ if (localName.equals(ROOT_ACTION)) {
if (!(current instanceof Node.Root)) {
throw new SAXParseException(
Localizer.getMessage("jsp.error.nested_jsproot"),
locator);
}
- node = new Node.JspRoot(qName, nonTaglibAttrs, nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- if (isTop) {
- pageInfo.setHasJspRoot(true);
- }
- } else if (localName.equals(PAGE_DIRECTIVE_ACTION)) {
- if (isTagFile) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.action.istagfile",
- localName),
- locator);
- }
- node = new Node.PageDirective(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- String imports = nonTaglibAttrs.getValue("import");
- // There can only be one 'import' attribute per page directive
- if (imports != null) {
- ((Node.PageDirective) node).addImport(imports);
- }
- } else if (localName.equals(INCLUDE_DIRECTIVE_ACTION)) {
- node = new Node.IncludeDirective(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- processIncludeDirective(nonTaglibAttrs.getValue("file"), node);
- } else if (localName.equals(DECLARATION_ACTION)) {
- node = new Node.Declaration(qName, nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- } else if (localName.equals(SCRIPTLET_ACTION)) {
- node = new Node.Scriptlet(qName, nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(EXPRESSION_ACTION)) {
- node = new Node.Expression(qName, nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(USE_BEAN_ACTION)) {
- node = new Node.UseBean(qName, nonTaglibAttrs, nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- } else if (localName.equals(SET_PROPERTY_ACTION)) {
- node = new Node.SetProperty(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(GET_PROPERTY_ACTION)) {
- node = new Node.GetProperty(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(INCLUDE_ACTION)) {
- node = new Node.IncludeAction(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(FORWARD_ACTION)) {
- node = new Node.ForwardAction(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(PARAM_ACTION)) {
- node = new Node.ParamAction(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(PARAMS_ACTION)) {
- node = new Node.ParamsAction(qName, nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- } else if (localName.equals(PLUGIN_ACTION)) {
- node = new Node.PlugIn(qName, nonTaglibAttrs, nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- } else if (localName.equals(TEXT_ACTION)) {
- node = new Node.JspText(qName, nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(BODY_ACTION)) {
- node = new Node.JspBody(qName, nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(ATTRIBUTE_ACTION)) {
- node = new Node.NamedAttribute(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(OUTPUT_ACTION)) {
- node = new Node.JspOutput(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(TAG_DIRECTIVE_ACTION)) {
- if (!isTagFile) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.action.isnottagfile",
- localName),
- locator);
- }
- node = new Node.TagDirective(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- String imports = nonTaglibAttrs.getValue("import");
- // There can only be one 'import' attribute per tag directive
- if (imports != null) {
- ((Node.TagDirective) node).addImport(imports);
- }
- } else if (localName.equals(ATTRIBUTE_DIRECTIVE_ACTION)) {
- if (!isTagFile) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.action.isnottagfile",
- localName),
- locator);
- }
- node = new Node.AttributeDirective(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- } else if (localName.equals(VARIABLE_DIRECTIVE_ACTION)) {
- if (!isTagFile) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.action.isnottagfile",
- localName),
- locator);
- }
- node = new Node.VariableDirective(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- } else if (localName.equals(INVOKE_ACTION)) {
- if (!isTagFile) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.action.isnottagfile",
- localName),
- locator);
- }
- node = new Node.InvokeAction(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(DOBODY_ACTION)) {
- if (!isTagFile) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.action.isnottagfile",
- localName),
- locator);
- }
- node = new Node.DoBodyAction(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(ELEMENT_ACTION)) {
- node = new Node.JspElement(qName, nonTaglibAttrs,
- nonTaglibXmlnsAttrs, taglibAttrs,
- start, current);
- } else if (localName.equals(FALLBACK_ACTION)) {
- node = new Node.FallBackAction(qName, nonTaglibXmlnsAttrs,
- taglibAttrs, start, current);
- } else {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.xml.badStandardAction",
- localName),
- locator);
- }
+ node =
+ new Node.JspRoot(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ if (isTop) {
+ pageInfo.setHasJspRoot(true);
+ }
+ } else if (localName.equals(PAGE_DIRECTIVE_ACTION)) {
+ if (isTagFile) {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.action.istagfile",
+ localName),
+ locator);
+ }
+ node =
+ new Node.PageDirective(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ String imports = nonTaglibAttrs.getValue("import");
+ // There can only be one 'import' attribute per page directive
+ if (imports != null) {
+ ((Node.PageDirective)node).addImport(imports);
+ }
+ } else if (localName.equals(INCLUDE_DIRECTIVE_ACTION)) {
+ node =
+ new Node.IncludeDirective(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ processIncludeDirective(nonTaglibAttrs.getValue("file"), node);
+ } else if (localName.equals(DECLARATION_ACTION)) {
+ node =
+ new Node.Declaration(
+ qName,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(SCRIPTLET_ACTION)) {
+ node =
+ new Node.Scriptlet(
+ qName,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(EXPRESSION_ACTION)) {
+ node =
+ new Node.Expression(
+ qName,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(USE_BEAN_ACTION)) {
+ node =
+ new Node.UseBean(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(SET_PROPERTY_ACTION)) {
+ node =
+ new Node.SetProperty(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(GET_PROPERTY_ACTION)) {
+ node =
+ new Node.GetProperty(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(INCLUDE_ACTION)) {
+ node =
+ new Node.IncludeAction(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(FORWARD_ACTION)) {
+ node =
+ new Node.ForwardAction(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(PARAM_ACTION)) {
+ node =
+ new Node.ParamAction(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(PARAMS_ACTION)) {
+ node =
+ new Node.ParamsAction(
+ qName,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(PLUGIN_ACTION)) {
+ node =
+ new Node.PlugIn(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(TEXT_ACTION)) {
+ node =
+ new Node.JspText(
+ qName,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(BODY_ACTION)) {
+ node =
+ new Node.JspBody(
+ qName,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(ATTRIBUTE_ACTION)) {
+ node =
+ new Node.NamedAttribute(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(OUTPUT_ACTION)) {
+ node =
+ new Node.JspOutput(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(TAG_DIRECTIVE_ACTION)) {
+ if (!isTagFile) {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.action.isnottagfile",
+ localName),
+ locator);
+ }
+ node =
+ new Node.TagDirective(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ String imports = nonTaglibAttrs.getValue("import");
+ // There can only be one 'import' attribute per tag directive
+ if (imports != null) {
+ ((Node.TagDirective)node).addImport(imports);
+ }
+ } else if (localName.equals(ATTRIBUTE_DIRECTIVE_ACTION)) {
+ if (!isTagFile) {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.action.isnottagfile",
+ localName),
+ locator);
+ }
+ node =
+ new Node.AttributeDirective(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(VARIABLE_DIRECTIVE_ACTION)) {
+ if (!isTagFile) {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.action.isnottagfile",
+ localName),
+ locator);
+ }
+ node =
+ new Node.VariableDirective(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(INVOKE_ACTION)) {
+ if (!isTagFile) {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.action.isnottagfile",
+ localName),
+ locator);
+ }
+ node =
+ new Node.InvokeAction(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(DOBODY_ACTION)) {
+ if (!isTagFile) {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.action.isnottagfile",
+ localName),
+ locator);
+ }
+ node =
+ new Node.DoBodyAction(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(ELEMENT_ACTION)) {
+ node =
+ new Node.JspElement(
+ qName,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else if (localName.equals(FALLBACK_ACTION)) {
+ node =
+ new Node.FallBackAction(
+ qName,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ current);
+ } else {
+ throw new SAXParseException(
+ Localizer.getMessage(
+ "jsp.error.xml.badStandardAction",
+ localName),
+ locator);
+ }
- return node;
+ return node;
}
/*
* Checks if the XML element with the given tag name is a custom action,
* and returns the corresponding Node object.
*/
- private Node parseCustomAction(String qName,
- String localName,
- String uri,
- Attributes nonTaglibAttrs,
- Attributes nonTaglibXmlnsAttrs,
- Attributes taglibAttrs,
- Mark start,
- Node parent) throws SAXException {
+ private Node parseCustomAction(
+ String qName,
+ String localName,
+ String uri,
+ Attributes nonTaglibAttrs,
+ Attributes nonTaglibXmlnsAttrs,
+ Attributes taglibAttrs,
+ Mark start,
+ Node parent)
+ throws SAXException {
- // Check if this is a user-defined (custom) tag
+ // Check if this is a user-defined (custom) tag
TagLibraryInfo tagLibInfo = pageInfo.getTaglib(uri);
if (tagLibInfo == null) {
return null;
- }
+ }
- TagInfo tagInfo = tagLibInfo.getTag(localName);
+ TagInfo tagInfo = tagLibInfo.getTag(localName);
TagFileInfo tagFileInfo = tagLibInfo.getTagFile(localName);
- if (tagInfo == null && tagFileInfo == null) {
- throw new SAXException(Localizer.getMessage("jsp.error.xml.bad_tag",
- localName, uri));
- }
- Class tagHandlerClass = null;
- if (tagInfo != null) {
- String handlerClassName = tagInfo.getTagClassName();
- try {
- tagHandlerClass = ctxt.getClassLoader().loadClass(handlerClassName);
- } catch (Exception e) {
- throw new SAXException(
- Localizer.getMessage("jsp.error.loadclass.taghandler",
- handlerClassName, qName));
- }
- }
-
- String prefix = "";
- int colon = qName.indexOf(':');
- if (colon != -1) {
- prefix = qName.substring(0, colon);
- }
-
- Node.CustomTag ret = null;
- if (tagInfo != null) {
- ret = new Node.CustomTag(qName, prefix, localName, uri,
- nonTaglibAttrs, nonTaglibXmlnsAttrs,
- taglibAttrs, start, parent, tagInfo,
- tagHandlerClass);
- } else {
- ret = new Node.CustomTag(qName, prefix, localName, uri,
- nonTaglibAttrs, nonTaglibXmlnsAttrs,
- taglibAttrs, start, parent, tagFileInfo);
- }
+ if (tagInfo == null && tagFileInfo == null) {
+ throw new SAXException(
+ Localizer.getMessage("jsp.error.xml.bad_tag", localName, uri));
+ }
+ Class tagHandlerClass = null;
+ if (tagInfo != null) {
+ String handlerClassName = tagInfo.getTagClassName();
+ try {
+ tagHandlerClass =
+ ctxt.getClassLoader().loadClass(handlerClassName);
+ } catch (Exception e) {
+ throw new SAXException(
+ Localizer.getMessage(
+ "jsp.error.loadclass.taghandler",
+ handlerClassName,
+ qName));
+ }
+ }
+
+ String prefix = "";
+ int colon = qName.indexOf(':');
+ if (colon != -1) {
+ prefix = qName.substring(0, colon);
+ }
+
+ Node.CustomTag ret = null;
+ if (tagInfo != null) {
+ ret =
+ new Node.CustomTag(
+ qName,
+ prefix,
+ localName,
+ uri,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ parent,
+ tagInfo,
+ tagHandlerClass);
+ } else {
+ ret =
+ new Node.CustomTag(
+ qName,
+ prefix,
+ localName,
+ uri,
+ nonTaglibAttrs,
+ nonTaglibXmlnsAttrs,
+ taglibAttrs,
+ start,
+ parent,
+ tagFileInfo);
+ }
- return ret;
+ return ret;
}
/*
@@ -837,39 +1049,50 @@
* @return The tag library associated with the given uri namespace
*/
private TagLibraryInfo getTaglibInfo(String prefix, String uri)
- throws JasperException {
+ throws JasperException {
- TagLibraryInfo result = null;
+ TagLibraryInfo result = null;
- if (uri.startsWith(URN_JSPTAGDIR)) {
- // uri (of the form "urn:jsptagdir:path") references tag file dir
- String tagdir = uri.substring(URN_JSPTAGDIR.length());
- result = new ImplicitTagLibraryInfo(ctxt, parserController, prefix,
- tagdir, err);
- } else {
- // uri references TLD file
- boolean isPlainUri = false;
- if (uri.startsWith(URN_JSPTLD)) {
- // uri is of the form "urn:jsptld:path"
- uri = uri.substring(URN_JSPTLD.length());
- } else {
- isPlainUri = true;
- }
-
- String[] location = ctxt.getTldLocation(uri);
- if (location != null || !isPlainUri) {
- /*
- * If the uri value is a plain uri, a translation error must
- * not be generated if the uri is not found in the taglib map.
- * Instead, any actions in the namespace defined by the uri
- * value must be treated as uninterpreted.
- */
- result = new TagLibraryInfoImpl(ctxt, parserController, prefix,
- uri, location, err);
- }
- }
+ if (uri.startsWith(URN_JSPTAGDIR)) {
+ // uri (of the form "urn:jsptagdir:path") references tag file dir
+ String tagdir = uri.substring(URN_JSPTAGDIR.length());
+ result =
+ new ImplicitTagLibraryInfo(
+ ctxt,
+ parserController,
+ prefix,
+ tagdir,
+ err);
+ } else {
+ // uri references TLD file
+ boolean isPlainUri = false;
+ if (uri.startsWith(URN_JSPTLD)) {
+ // uri is of the form "urn:jsptld:path"
+ uri = uri.substring(URN_JSPTLD.length());
+ } else {
+ isPlainUri = true;
+ }
- return result;
+ String[] location = ctxt.getTldLocation(uri);
+ if (location != null || !isPlainUri) {
+ /*
+ * If the uri value is a plain uri, a translation error must
+ * not be generated if the uri is not found in the taglib map.
+ * Instead, any actions in the namespace defined by the uri
+ * value must be treated as uninterpreted.
+ */
+ result =
+ new TagLibraryInfoImpl(
+ ctxt,
+ parserController,
+ prefix,
+ uri,
+ location,
+ err);
+ }
+ }
+
+ return result;
}
/*
@@ -881,25 +1104,26 @@
* scripting element has been reached.
*/
private void checkScriptingBody(Node.ScriptingElement scriptingElem)
- throws SAXException {
- Node.Nodes body = scriptingElem.getBody();
- if (body != null) {
- int size = body.size();
- for (int i=0; i<size; i++) {
- Node n = body.getNode(i);
- if (!(n instanceof Node.TemplateText)) {
- String elemType = SCRIPTLET_ACTION;
- if (scriptingElem instanceof Node.Declaration)
- elemType = DECLARATION_ACTION;
- if (scriptingElem instanceof Node.Expression)
- elemType = EXPRESSION_ACTION;
- String msg = Localizer.getMessage(
- "jsp.error.parse.xml.scripting.invalid.body",
- elemType);
- throw new SAXException(msg);
- }
- }
- }
+ throws SAXException {
+ Node.Nodes body = scriptingElem.getBody();
+ if (body != null) {
+ int size = body.size();
+ for (int i = 0; i < size; i++) {
+ Node n = body.getNode(i);
+ if (!(n instanceof Node.TemplateText)) {
+ String elemType = SCRIPTLET_ACTION;
+ if (scriptingElem instanceof Node.Declaration)
+ elemType = DECLARATION_ACTION;
+ if (scriptingElem instanceof Node.Expression)
+ elemType = EXPRESSION_ACTION;
+ String msg =
+ Localizer.getMessage(
+ "jsp.error.parse.xml.scripting.invalid.body",
+ elemType);
+ throw new SAXException(msg);
+ }
+ }
+ }
}
/*
@@ -909,22 +1133,23 @@
* 'file' attribute of the include directive
* @param parent The Node representing the include directive
*/
- private void processIncludeDirective(String fname, Node parent)
- throws SAXException {
+ private void processIncludeDirective(String fname, Node parent)
+ throws SAXException {
- if (fname == null) {
- return;
- }
-
- try {
- parserController.parse(fname, parent, null);
- } catch (FileNotFoundException fnfe) {
- throw new SAXParseException(
- Localizer.getMessage("jsp.error.file.not.found", fname),
- locator, fnfe);
- } catch (Exception e) {
- throw new SAXException(e);
- }
+ if (fname == null) {
+ return;
+ }
+
+ try {
+ parserController.parse(fname, parent, null);
+ } catch (FileNotFoundException fnfe) {
+ throw new SAXParseException(
+ Localizer.getMessage("jsp.error.file.not.found", fname),
+ locator,
+ fnfe);
+ } catch (Exception e) {
+ throw new SAXException(e);
+ }
}
/*
@@ -937,13 +1162,13 @@
* @param attrs The element's attributes
*/
private void checkPrefixes(String uri, String qName, Attributes attrs) {
-
- checkPrefix(uri, qName);
- int len = attrs.getLength();
- for (int i=0; i<len; i++) {
- checkPrefix(attrs.getURI(i), attrs.getQName(i));
- }
+ checkPrefix(uri, qName);
+
+ int len = attrs.getLength();
+ for (int i = 0; i < len; i++) {
+ checkPrefix(attrs.getURI(i), attrs.getQName(i));
+ }
}
/*
@@ -956,14 +1181,14 @@
*/
private void checkPrefix(String uri, String qName) {
- int index = qName.indexOf(':');
- if (index != -1) {
- String prefix = qName.substring(0, index);
- pageInfo.addPrefix(prefix);
- if ("jsp".equals(prefix) && !JSP_URI.equals(uri)) {
- pageInfo.setIsJspPrefixHijacked(true);
- }
- }
+ int index = qName.indexOf(':');
+ if (index != -1) {
+ String prefix = qName.substring(0, index);
+ pageInfo.addPrefix(prefix);
+ if ("jsp".equals(prefix) && !JSP_URI.equals(uri)) {
+ pageInfo.setIsJspPrefixHijacked(true);
+ }
+ }
}
/*
@@ -975,18 +1200,21 @@
*
* @return The SAXParser
*/
- private static SAXParser getSAXParser(boolean validating,
- JspDocumentParser jspDocParser)
- throws Exception {
-
+ private static SAXParser getSAXParser(
+ boolean validating,
+ JspDocumentParser jspDocParser)
+ throws Exception {
+
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
// Preserve xmlns attributes
- factory.setFeature("http://xml.org/sax/features/namespace-prefixes",
- true);
- factory.setFeature("http://xml.org/sax/features/validation",
- validating);
+ factory.setFeature(
+ "http://xml.org/sax/features/namespace-prefixes",
+ true);
+ factory.setFeature(
+ "http://xml.org/sax/features/validation",
+ validating);
// Configure the parser
SAXParser saxParser = factory.newSAXParser();
@@ -1009,24 +1237,26 @@
*
* @return An InputSource to the requested JSP document or tag file
*/
- private InputSource getInputSource(String path,
- JarFile jarFile,
- JspCompilationContext ctxt,
- ErrorDispatcher err)
- throws Exception {
+ private InputSource getInputSource(
+ String path,
+ JarFile jarFile,
+ JspCompilationContext ctxt,
+ ErrorDispatcher err)
+ throws Exception {
- return new InputSource(JspUtil.getInputStream(path, jarFile, ctxt,
- err));
+ return new InputSource(
+ JspUtil.getInputStream(path, jarFile, ctxt, err));
}
/*
* Exception indicating that a DOCTYPE declaration is present, but
* validation is turned off.
*/
- private static class EnableDTDValidationException extends SAXParseException {
+ private static class EnableDTDValidationException
+ extends SAXParseException {
EnableDTDValidationException(String message, Locator loc) {
super(message, loc);
}
- }
+ }
}