You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pi...@locus.apache.org on 2000/09/19 21:26:04 UTC
cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler JspParseEventListener.java
pierred 00/09/19 12:26:03
Modified: jasper/src/share/org/apache/jasper/compiler
JspParseEventListener.java
Log:
Support for XML syntax:
- conforms to updated ParseEventListener interface
- constructor now takes ParserController as argument
- include directive now calls back into the parser controller
(instead of just pushing new file into the JspReader)
- xml generation code added to handler methods
- validate() method added as a convenience method for XML validation
Revision Changes Path
1.2 +77 -16 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java
Index: JspParseEventListener.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- JspParseEventListener.java 2000/08/12 00:52:08 1.1
+++ JspParseEventListener.java 2000/09/19 19:26:03 1.2
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v 1.1 2000/08/12 00:52:08 pierred Exp $
- * $Revision: 1.1 $
- * $Date: 2000/08/12 00:52:08 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v 1.2 2000/09/19 19:26:03 pierred Exp $
+ * $Revision: 1.2 $
+ * $Date: 2000/09/19 19:26:03 $
*
* ====================================================================
*
@@ -87,12 +87,14 @@
* JSP code generator "backend".
*
* @author Anil K. Vijendran
+ * @author Pierre Delisle
*/
public class JspParseEventListener extends BaseJspListener {
private static CommentGenerator commentGenerator = new JakartaCommentGenerator();
JspCompilationContext ctxt;
+ ParserController parserCtl;
String jspServletBase = Constants.JSP_SERVLET_BASE;
String serviceMethodName = Constants.SERVICE_METHOD_NAME;
@@ -134,6 +136,10 @@
private Stack tagHandlerStack;
private Hashtable tagVarNumbers;
+ // The XML Outputter where the XML stream of the JSP page
+ // is generated.
+ private XmlOutputter xo = new XmlOutputter();
+
final void addGenerator(Generator gen) throws JasperException {
gen.init(ctxt);
generators.addElement(gen);
@@ -151,9 +157,11 @@
* Package private since I want everyone to come in through
* org.apache.jasper.compiler.Main.
*/
- JspParseEventListener(JspCompilationContext ctxt) {
+ JspParseEventListener(JspCompilationContext ctxt,
+ ParserController parserCtl) {
super(ctxt.getReader(), ctxt.getWriter());
this.ctxt = ctxt;
+ this.parserCtl = parserCtl;
this.beanInfo = new BeanRepository(ctxt.getClassLoader());
this.libraries = new TagLibraries(ctxt.getClassLoader());
@@ -372,10 +380,13 @@
}
- public void handleComment(Mark start, Mark stop) throws JasperException {
+ public void handleComment(Mark start, Mark stop, char[] text)
+ throws JasperException
+ {
Constants.message("jsp.message.htmlcomment",
- new Object[] { reader.getChars(start, stop) },
- Logger.DEBUG);
+ new Object[] { text },
+ Logger.DEBUG);
+ //@@@ xo
}
interface PageDirectiveHandler {
@@ -723,13 +734,23 @@
Constants.getString("jsp.error.include.missing.file"));
// jsp.error.include.bad.file needs taking care of here??
+ /* NOT COMPILED
try {
reader.pushFile(file, encoding);
} catch (FileNotFoundException fnfe) {
throw new CompileException(start,
Constants.getString("jsp.error.include.bad.file"));
}
+ */
+ try {
+ parserCtl.parse(file, encoding);
+ } catch (Exception fnfe) {
+ throw new CompileException(
+ start,
+ Constants.getString("jsp.error.include.bad.file"));
+ }
}
+ xo.append("jsp:directive." + directive, attrs);
}
@@ -778,31 +799,34 @@
}
}
- public void handleDeclaration(Mark start, Mark stop, Hashtable attrs)
+ public void handleDeclaration(Mark start, Mark stop, Hashtable attrs,
+ char[] text)
throws JasperException
{
Generator gen
- = new GeneratorWrapper(new DeclarationGenerator(reader.getChars(
- start, stop)), start, stop);
+ = new GeneratorWrapper(new DeclarationGenerator(text), start, stop);
addGenerator(gen);
+ xo.append("jsp:declaration", attrs, text);
}
- public void handleScriptlet(Mark start, Mark stop, Hashtable attrs)
+ public void handleScriptlet(Mark start, Mark stop, Hashtable attrs,
+ char[] text)
throws JasperException
{
Generator gen
- = new GeneratorWrapper(new ScriptletGenerator(reader.getChars(
- start, stop)), start, stop);
+ = new GeneratorWrapper(new ScriptletGenerator(text), start, stop);
addGenerator(gen);
+ xo.append("jsp:scriptlet", attrs, text);
}
- public void handleExpression(Mark start, Mark stop, Hashtable attrs)
+ public void handleExpression(Mark start, Mark stop, Hashtable attrs,
+ char[] text)
throws JasperException
{
Generator gen
- = new GeneratorWrapper(new ExpressionGenerator(reader.getChars(
- start, stop)), start, stop);
+ = new GeneratorWrapper(new ExpressionGenerator(text), start, stop);
addGenerator(gen);
+ xo.append("jsp:expression", attrs, text);
}
public void handleBean(Mark start, Mark stop, Hashtable attrs)
@@ -814,6 +838,7 @@
start, stop);
addGenerator(gen);
+ xo.append("jsp:useBean", attrs);
}
public void handleBeanEnd(Mark start, Mark stop, Hashtable attrs)
@@ -824,6 +849,7 @@
start, stop);
// End the block started by useBean body.
addGenerator(gen);
+ xo.append("jsp:useBean");
}
public void handleGetProperty(Mark start, Mark stop, Hashtable attrs)
@@ -834,6 +860,7 @@
beanInfo), start, stop);
addGenerator(gen);
+ xo.append("jsp:getProperty", attrs);
}
public void handleSetProperty(Mark start, Mark stop, Hashtable attrs)
@@ -844,6 +871,7 @@
beanInfo), start, stop);
addGenerator(gen);
+ xo.append("jsp:setProperty", attrs);
}
public void handlePlugin(Mark start, Mark stop, Hashtable attrs,
@@ -857,6 +885,7 @@
Generator gen = new GeneratorWrapper (new PluginGenerator (start, attrs,
param, fallback), start, stop);
addGenerator (gen);
+ //@@@ xo
}
public void handleForward(Mark start, Mark stop, Hashtable attrs, Hashtable param)
@@ -867,6 +896,7 @@
start, stop);
addGenerator(gen);
+ //@@@ xo
}
public void handleInclude(Mark start, Mark stop, Hashtable attrs, Hashtable param)
@@ -877,6 +907,7 @@
start, stop);
addGenerator(gen);
+ //@@@ xo
}
@@ -896,6 +927,7 @@
start, stop);
addGenerator(gen);
+ xo.append(chars);
}
public void handleTagBegin(Mark start, Mark stop, Hashtable attrs, String prefix,
@@ -908,6 +940,7 @@
Generator gen = new GeneratorWrapper(tbg, start, stop);
addGenerator(gen);
+ xo.append(prefix+":"+shortTagName, attrs);
}
public void handleTagEnd(Mark start, Mark stop, String prefix,
@@ -920,9 +953,37 @@
Generator gen = new GeneratorWrapper(teg, start, stop);
addGenerator(gen);
+ xo.append(prefix+":"+shortTagName);
}
public TagLibraries getTagLibraries() {
return libraries;
+ }
+
+ public void handleRootEnd() {
+ xo.append("jsp:root");
+ }
+
+ public void handleRootBegin(Hashtable attrs) {
+ xo.addRootAttrs(attrs);
+ }
+
+ /**
+ * validate the XML stream of the JSP document against the
+ * libraries used by the document.
+ */
+ public void validate() throws JasperException {
+ Enumeration enum = libraries.getTagLibInfos();
+ while (enum.hasMoreElements()) {
+ TagLibraryInfo tli = (TagLibraryInfo)enum.nextElement();
+ //@@@ remove cast when TagLibraryInfo is fixed in spec
+ String msg = ((TagLibraryInfoImpl)tli).validate(xo.getPageInfo());
+ if (msg != null) {
+ throw new JasperException(
+ Constants.getString(
+ "jsp.error.taglibraryvalidator.invalidpage",
+ new Object[]{tli.getShortName(), msg}));
+ }
+ }
}
}