You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2003/03/24 22:36:06 UTC

cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler Compiler.java JspDocumentParser.java Node.java PageDataImpl.java PageInfo.java Parser.java ParserController.java Validator.java

luehe       2003/03/24 13:36:05

  Modified:    jasper2/src/share/org/apache/jasper/compiler Compiler.java
                        JspDocumentParser.java Node.java PageDataImpl.java
                        PageInfo.java Parser.java ParserController.java
                        Validator.java
  Log:
  Implemented JSP 2.0 i18n-related spec change:
  
    Determine page encoding of included resources in the same fashion as
    page encoding of top-level page.
  
    This means that any included resources are now parsed using their own
    page encoding, instead of leveraging the page encoding of the
    top-level page.
  
    This also means that the <page-encoding> subelement of
    <jsp-property-group> no longer applies to an entire translation unit,
    but individual pages (whose URIs match the property group's URL pattern).
  
  Revision  Changes    Path
  1.60      +0 -1      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
  retrieving revision 1.59
  retrieving revision 1.60
  diff -u -r1.59 -r1.60
  --- Compiler.java	19 Mar 2003 20:51:34 -0000	1.59
  +++ Compiler.java	24 Mar 2003 21:36:05 -0000	1.60
  @@ -213,7 +213,6 @@
   	    pageInfo.setELIgnoredSpecified(true);
   	}
   	pageInfo.setIsXmlConfig(JspUtil.booleanValue(jspProperty.isXml()));
  -	pageInfo.setConfigEncoding(jspProperty.getPageEncoding());
   	pageInfo.setELIgnored(JspUtil.booleanValue(jspProperty.isELIgnored()));
   	pageInfo.setScriptingInvalid(JspUtil.booleanValue(jspProperty.isScriptingInvalid()));
   	if (jspProperty.getIncludePrelude() != null) {
  
  
  
  1.47      +42 -37    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.46
  retrieving revision 1.47
  diff -u -r1.46 -r1.47
  --- JspDocumentParser.java	1 Mar 2003 02:07:52 -0000	1.46
  +++ JspDocumentParser.java	24 Mar 2003 21:36:05 -0000	1.47
  @@ -144,34 +144,39 @@
   				   InputStream inStream,
   				   Node parent,
   				   boolean isTagFile,
  -				   boolean directivesOnly)
  +				   boolean directivesOnly,
  +				   String pageEnc,
  +				   String jspConfigPageEnc)
   	        throws JasperException {
   
  -	JspDocumentParser handler = new JspDocumentParser(pc, path, inStream,
  -							  isTagFile,
  -							  directivesOnly);
  +	JspDocumentParser jspDocParser = new JspDocumentParser(pc, path,
  +							       inStream,
  +							       isTagFile,
  +							       directivesOnly);
  +
   	// It's an error to have a prelude or a coda associated with
   	// a JSP document
  -	if (!handler.pageInfo.getIncludePrelude().isEmpty()) {
  -	    String file = (String) handler.pageInfo.getIncludePrelude().get(0);
  -	    handler.err.jspError("jsp.error.prelude.xml", path, file);
  -	}
  -	if (!handler.pageInfo.getIncludeCoda().isEmpty()) {
  -	    String file = (String) handler.pageInfo.getIncludeCoda().get(0);
  -	    handler.err.jspError("jsp.error.coda.xml", path, file);
  +	if (!jspDocParser.pageInfo.getIncludePrelude().isEmpty()) {
  +	    String file = (String) jspDocParser.pageInfo.getIncludePrelude().get(0);
  +	    jspDocParser.err.jspError("jsp.error.prelude.xml", path, file);
  +	}
  +	if (!jspDocParser.pageInfo.getIncludeCoda().isEmpty()) {
  +	    String file = (String) jspDocParser.pageInfo.getIncludeCoda().get(0);
  +	    jspDocParser.err.jspError("jsp.error.coda.xml", path, file);
   	}
   
   	Node.Nodes pageNodes = null;
  -	Node.Root jspRoot = null;
   
   	try {
  -	    if (parent == null) {
  -		// create dummy <jsp:root> element
  -		jspRoot = new Node.Root(true);
  -		handler.current = jspRoot;
  -	    } else {
  -		handler.isTop = false;
  -		handler.current = parent;
  +
  +	    // 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);
  +	    jspDocParser.current = dummyRoot;
  +
  +	    if (parent != null) {
  +		jspDocParser.isTop = false;
   	    }
   
   	    // Use the default (non-validating) parser
  @@ -184,22 +189,19 @@
   	    // Configure the parser
   	    SAXParser saxParser = factory.newSAXParser();
   	    XMLReader xmlReader = saxParser.getXMLReader();
  -	    xmlReader.setProperty(LEXICAL_HANDLER_PROPERTY, handler);
  -	    xmlReader.setErrorHandler(handler);
  +	    xmlReader.setProperty(LEXICAL_HANDLER_PROPERTY, jspDocParser);
  +	    xmlReader.setErrorHandler(jspDocParser);
   
   	    // Parse the input
  -	    saxParser.parse(handler.inputSource, handler);
  +	    saxParser.parse(jspDocParser.inputSource, jspDocParser);
  +
  +	    // Create Node.Nodes from dummy root
  +	    pageNodes = new Node.Nodes(dummyRoot);
   
  -	    if (parent == null) {
  -		// Create Node.Nodes from dummy (top-level) <jsp:root>
  -		pageNodes = new Node.Nodes(jspRoot);
  -	    } else {
  -		pageNodes = parent.getBody();
  -	    }
   	} catch (IOException ioe) {
  -	    handler.err.jspError("jsp.error.data.file.read", path, ioe);
  +	    jspDocParser.err.jspError("jsp.error.data.file.read", path, ioe);
   	} catch (Exception e) {
  -	    handler.err.jspError(e);
  +	    jspDocParser.err.jspError(e);
   	}
   
   	return pageNodes;
  @@ -812,10 +814,13 @@
       }
   
       /*
  -     * Parses the given file that is being specified in the given include
  -     * directive.
  +     * Parses the given file included via an include directive.
  +     *
  +     * @param fname The path to the included resource, as specified by the
  +     * 'file' attribute of the include directive
  +     * @param parent The Node representing the include directive
        */
  -    private void processIncludeDirective(String fname, Node includeDir) 
  +    private void processIncludeDirective(String fname, Node parent) 
   		throws SAXException {
   
   	if (fname == null) {
  @@ -823,7 +828,7 @@
   	}
   
   	try {
  -	    parserController.parse(fname, includeDir, null);
  +	    parserController.parse(fname, parent, null);
   	} catch (FileNotFoundException fnfe) {
   	    throw new SAXParseException(
                       Localizer.getMessage("jsp.error.file.not.found", fname),
  
  
  
  1.67      +40 -29    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java
  
  Index: Node.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java,v
  retrieving revision 1.66
  retrieving revision 1.67
  diff -u -r1.66 -r1.67
  --- Node.java	19 Mar 2003 20:51:34 -0000	1.66
  +++ Node.java	24 Mar 2003 21:36:05 -0000	1.67
  @@ -342,18 +342,12 @@
   	return isDummy;
       }
   
  -    /**
  -     * @return true if the current page is in xml syntax, false otherwise.
  -     */
  -    public boolean isXmlSyntax() {
  -	Node r = this;
  -	while (!(r instanceof Node.Root)) {
  -	    r = r.getParent();
  -	    if (r == null)
  -		return false;
  +    public Node.Root getRoot() {
  +	Node n = this;
  +	while (!(n instanceof Node.Root)) {
  +	    n = n.getParent();
   	}
  -
  -	return r.isXmlSyntax();
  +	return (Node.Root) n;
       }
   
       /**
  @@ -395,14 +389,11 @@
   	private Root parentRoot;
   	private boolean isXmlSyntax;
   
  -	/*
  -	 * Constructor for dummy root.
  -	 */
  -	Root(boolean isXmlSyntax) {
  -	    this.isXmlSyntax = isXmlSyntax;
  -	    this.qName = JSP_ROOT_ACTION;
  -	    this.localName = ROOT_ACTION;
  -	}
  +	// Source encoding of the page containing this Root
  +	private String pageEnc;
  +	
  +	// Page encoding specified in JSP config element
  +	private String jspConfigPageEnc;
   
   	/*
   	 * Constructor.
  @@ -428,8 +419,32 @@
   	    return isXmlSyntax;
   	}
   
  +	/*
  +	 * Sets the encoding specified in the JSP config element whose URL
  +	 * pattern matches the page containing this Root.
  +	 */
  +	public void setJspConfigPageEncoding(String enc) {
  +	    jspConfigPageEnc = enc;
  +	}
  +
  +	/*
  +	 * Gets the encoding specified in the JSP config element whose URL
  +	 * pattern matches the page containing this Root.
  +	 */
  +	public String getJspConfigPageEncoding() {
  +	    return jspConfigPageEnc;
  +	}
  +
  +	public void setPageEncoding(String enc) {
  +	    pageEnc = enc;
  +	}
  +
  +	public String getPageEncoding() {
  +	    return pageEnc;
  +	}
  +
   	/**
  -	 * @return The enclosing root to this root. Usually represents the
  +	 * @return The enclosing root to this Root. Usually represents the
   	 * page that includes this one.
   	 */
   	public Root getParentRoot() {
  @@ -440,15 +455,11 @@
       /**
        * Represents the root of a Jsp document (XML syntax)
        */
  -    public static class JspRoot extends Root {
  +    public static class JspRoot extends Node {
   
   	public JspRoot(String qName, Attributes attrs, Attributes xmlnsAttrs,
   		       Mark start, Node parent) {
  -	    super(start, parent, true);
  -	    this.qName = qName;
  -	    this.localName = ROOT_ACTION;
  -	    this.attrs = attrs;
  -	    this.xmlnsAttrs = xmlnsAttrs;
  +	    super(qName, ROOT_ACTION, attrs, xmlnsAttrs, start, parent);
   	}
   
   	public void accept(Visitor v) throws JasperException {
  
  
  
  1.25      +6 -6      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageDataImpl.java
  
  Index: PageDataImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageDataImpl.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- PageDataImpl.java	26 Feb 2003 22:58:16 -0000	1.24
  +++ PageDataImpl.java	24 Mar 2003 21:36:05 -0000	1.25
  @@ -293,7 +293,7 @@
   	}
   
   	public void visit(Node.ELExpression n) throws JasperException {
  -	    if (!n.isXmlSyntax()) {
  +	    if (!n.getRoot().isXmlSyntax()) {
   		buf.append("<").append(JSP_TEXT_ACTION);
   		buf.append(" jsp:id=\"");
   		buf.append(jspId++).append("\">");
  @@ -301,7 +301,7 @@
   	    buf.append("${");
   	    buf.append(n.getText());
   	    buf.append("}");
  -	    if (!n.isXmlSyntax()) {
  +	    if (!n.getRoot().isXmlSyntax()) {
   		buf.append(JSP_TEXT_ACTION_END);
   	    }
   	    buf.append("\n");
  @@ -388,7 +388,7 @@
   	     * If the template text came from a JSP page written in JSP syntax,
   	     * create a jsp:text element for it (JSP 5.3.2).
   	     */
  -	    appendText(n.getText(), !n.isXmlSyntax());
  +	    appendText(n.getText(), !n.getRoot().isXmlSyntax());
   	}
   
   	/*
  
  
  
  1.26      +3 -31     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageInfo.java
  
  Index: PageInfo.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageInfo.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- PageInfo.java	19 Mar 2003 20:51:35 -0000	1.25
  +++ PageInfo.java	24 Mar 2003 21:36:05 -0000	1.26
  @@ -88,10 +88,6 @@
       private boolean threadSafe = true;
       private boolean isErrorPage = false;
       private String errorPage = null;
  -    private String pageEncoding = null;
  -
  -    // Encoding specified in JSP config element
  -    private String configEncoding;
   
       /*
        * Indicates whether an encoding has been explicitly specified in the
  @@ -258,36 +254,12 @@
   	this.isErrorPage = isErrorPage;
       }
   
  -    public void setPageEncoding(String pageEncoding) {
  -	this.pageEncoding = pageEncoding;
  -    }
  -
  -    public String getPageEncoding() {
  -	return pageEncoding;
  -    }
  -
       public void setIsEncodingSpecifiedInProlog(boolean isSpecified) {
   	this.isEncodingSpecifiedInProlog = isSpecified;
       }
   
       public boolean isEncodingSpecifiedInProlog() {
   	return this.isEncodingSpecifiedInProlog;
  -    }
  -
  -    /*
  -     * Sets the encoding specified in the JSP config element whose URL pattern
  -     * matches this page.
  -     */
  -    public void setConfigEncoding(String enc) {
  -	this.configEncoding = enc;
  -    }
  -
  -    /*
  -     * Gets the encoding specified in the JSP config element whose URL pattern
  -     * matches this page.
  -     */
  -    public String getConfigEncoding() {
  -	return this.configEncoding;
       }
   
       public int getMaxTagNesting() {
  
  
  
  1.69      +8 -4      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java,v
  retrieving revision 1.68
  retrieving revision 1.69
  diff -u -r1.68 -r1.69
  --- Parser.java	1 Mar 2003 02:07:52 -0000	1.68
  +++ Parser.java	24 Mar 2003 21:36:05 -0000	1.69
  @@ -144,13 +144,17 @@
   				   Node parent,
   				   boolean isTagFile,
   				   boolean directivesOnly,
  -				   JarFile jarFile)
  +				   JarFile jarFile,
  +				   String pageEnc,
  +				   String jspConfigPageEnc)
   		throws JasperException {
   
   	Parser parser = new Parser(pc, reader, isTagFile, directivesOnly,
   				   jarFile);
   
   	Node.Root root = new Node.Root(reader.mark(), parent, false);
  +	root.setPageEncoding(pageEnc);
  +	root.setJspConfigPageEncoding(jspConfigPageEnc);
   
   	if (directivesOnly) {
   	    parser.parseTagFileDirectives(root);
  
  
  
  1.35      +51 -43    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java
  
  Index: ParserController.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- ParserController.java	26 Feb 2003 22:58:16 -0000	1.34
  +++ ParserController.java	24 Mar 2003 21:36:05 -0000	1.35
  @@ -103,8 +103,8 @@
       private static final String JSP_ROOT_TAG = "<jsp:root";
   
       /*
  -     * Tells if the file being processed is the "top" file
  -     * in the translation unit.
  +     * Tells if the file being processed is the "top" file in the translation
  +     * unit.
        */
       private boolean isTopFile = true;
   
  @@ -194,9 +194,12 @@
   	Node.Nodes parsedPage = null;
   	String absFileName = resolveFileName(inFileName);
   
  +	String jspConfigPageEnc = getJspConfigPageEncoding(absFileName);
  +
   	// Figure out what type of JSP document and encoding type we are
   	// dealing with
  -	figureOutJspDocument(absFileName, jarFile);
  +	determineSyntaxAndEncoding(absFileName, jarFile,
  +				   jspConfigPageEnc);
   
   	if (isTopFile) {
   	    if (isXml && pageInfo.isEncodingSpecifiedInProlog()) {
  @@ -206,7 +209,6 @@
   		 * (if any), treating "UTF-16", "UTF-16BE", and "UTF-16LE" as
   		 * identical.
   		 */
  -		String jspConfigPageEnc = pageInfo.getConfigEncoding();
   		if (jspConfigPageEnc != null
   		        && !jspConfigPageEnc.equals(sourceEnc)
   		        && (!jspConfigPageEnc.startsWith("UTF-16")
  @@ -215,7 +217,6 @@
   				 sourceEnc, jspConfigPageEnc);
   		}
   	    }
  -	    pageInfo.setPageEncoding(sourceEnc);
   	    isTopFile = false;
   	} else {
   	    compiler.getPageInfo().addDependant(absFileName);
  @@ -226,21 +227,13 @@
   	    // JSP document (XML syntax)
   	    InputStream inStream = null;
   	    try {
  -		// XXX Files included using the include directive must be read
  -		// using the character encoding of the including page. 
  -		// However, I am wondering how to implement this if an
  -		// included JSP document contains its own XML prolog. Since
  -		// we're handing the included JSP document off to the XML
  -		// (e.g., SAX) parser, we have no control over how it's parsed:
  -		// the parser will determine the encoding from the XML prolog
  -		// on its own, and use it. We can't tell the parser to use
  -		// a different encoding.
   		inStream = JspUtil.getInputStream(absFileName, jarFile, ctxt,
   						  err);
   		parsedPage = JspDocumentParser.parse(this, absFileName,
   						     inStream, parent,
  -						     isTagFile,
  -						     directivesOnly);
  +						     isTagFile, directivesOnly,
  +						     sourceEnc,
  +						     jspConfigPageEnc);
   	    } finally {
   		if (inStream != null) {
   		    try {
  @@ -253,21 +246,14 @@
   	    // Standard syntax
   	    InputStreamReader inStreamReader = null;
   	    try {
  -		// Files included using the include directive must be read
  -		// using the character encoding of the including page, which is
  -		// the encoding returned by pageInfo.getPageEncoding().
  -		inStreamReader = JspUtil.getReader(absFileName,
  -						   pageInfo.getPageEncoding(),
  -						   jarFile,
  -						   ctxt,
  -						   err);
  -		JspReader jspReader = new JspReader(ctxt,
  -						    absFileName,
  -						    pageInfo.getPageEncoding(),
  -						    inStreamReader,
  +		inStreamReader = JspUtil.getReader(absFileName, sourceEnc,
  +						   jarFile, ctxt, err);
  +		JspReader jspReader = new JspReader(ctxt, absFileName,
  +						    sourceEnc, inStreamReader,
   						    err);
                   parsedPage = Parser.parse(this, jspReader, parent, isTagFile,
  -					  directivesOnly, jarFile);
  +					  directivesOnly, jarFile, sourceEnc,
  +					  jspConfigPageEnc);
               } finally {
   		if (inStreamReader != null) {
   		    try {
  @@ -283,6 +269,25 @@
   	return parsedPage;
       }
   
  +    /*
  +     * Checks to see if the given URI is matched by a URL pattern specified in
  +     * a jsp-property-group in web.xml, and if so, returns the value of the
  +     * <page-encoding> element.
  +     *
  +     * @param absFileName The URI to match
  +     *
  +     * @return The value of the <page-encoding> attribute of the 
  +     * jsp-property-group with matching URL pattern
  +     */
  +    private String getJspConfigPageEncoding(String absFileName)
  +            throws JasperException {
  +
  +	JspConfig jspConfig = ctxt.getOptions().getJspConfig();
  +	JspConfig.JspProperty jspProperty
  +	    = jspConfig.findJspProperty(absFileName);
  +	return jspProperty.getPageEncoding();
  +    }
  +
       /**
        * Determines the properties of the given page or tag file.
        * The properties to be determined are:
  @@ -298,16 +303,19 @@
        * If these properties are already specified in the jsp-config element
        * in web.xml, then they are used.
        */
  -    private void figureOutJspDocument(String fname, JarFile jarFile)
  +    private void determineSyntaxAndEncoding(String absFileName,
  +					    JarFile jarFile,
  +					    String jspConfigPageEnc)
   	        throws JasperException, IOException {
   
  +	isXml = false;
  +
   	/*
   	 * 'true' if the syntax of the page (XML or standard) is identified by
   	 * external information: either via a JSP configuration element or
   	 * the ".jspx" suffix
   	 */
   	boolean isExternal = false;
  -	isXml = false;
   
   	/*
   	 * Indicates whether we need to revert from temporary usage of
  @@ -319,7 +327,8 @@
   	    // If <is-xml> is specified in a <jsp-property-group>, it is used.
   	    isXml = pageInfo.isXmlConfig();
   	    isExternal = true;
  -	} else if (fname.endsWith(".jspx") || fname.endsWith(".tagx")) {
  +	} else if (absFileName.endsWith(".jspx")
  +		       || absFileName.endsWith(".tagx")) {
   	    isXml = true;
   	    isExternal = true;
   	}
  @@ -327,7 +336,7 @@
   	if (isExternal && !isXml) {
   	    // JSP (standard) syntax. Use encoding specified in jsp-config
   	    // if provided.
  -	    sourceEnc = pageInfo.getConfigEncoding();
  +	    sourceEnc = jspConfigPageEnc;
   	    if (sourceEnc != null) {
   		return;
   	    }
  @@ -335,8 +344,8 @@
   	    sourceEnc = "ISO-8859-1";
   	} else {
   	    // XML syntax or unknown, (auto)detect encoding ...
  -	    Object[] ret = XMLEncodingDetector.getEncoding(fname, jarFile,
  -							   ctxt, err);
  +	    Object[] ret = XMLEncodingDetector.getEncoding(absFileName,
  +							   jarFile, ctxt, err);
   	    sourceEnc = (String) ret[0];
   	    if (((Boolean) ret[1]).booleanValue()) {
   		pageInfo.setIsEncodingSpecifiedInProlog(true);
  @@ -382,7 +391,8 @@
   	 */
   	JspReader jspReader = null;
   	try {
  -	    jspReader = new JspReader(ctxt, fname, sourceEnc, jarFile, err);
  +	    jspReader = new JspReader(ctxt, absFileName, sourceEnc, jarFile,
  +				      err);
   	} catch (FileNotFoundException ex) {
   	    throw new JasperException(ex);
   	}
  @@ -407,7 +417,7 @@
   	 * Determine the page encoding from the page directive, unless it's
   	 * specified via JSP config.
   	 */
  -	sourceEnc = pageInfo.getConfigEncoding();
  +	sourceEnc = jspConfigPageEnc;
   	if (sourceEnc == null) {
   	    sourceEnc = getSourceEncodingForJspSyntax(jspReader, startMark);
   	}
  @@ -456,12 +466,10 @@
       }
   
       /*
  -     * Resolve the name of the file and update
  -     * baseDirStack() to keep track ot the current
  -     * base directory for each included file.
  -     * The 'root' file is always an 'absolute' path,
  -     * so no need to put an initial value in the
  -     * baseDirStack.
  +     * Resolve the name of the file and update baseDirStack() to keep track of
  +     * the current base directory for each included file.
  +     * The 'root' file is always an 'absolute' path, so no need to put an
  +     * initial value in the baseDirStack.
        */
       private String resolveFileName(String inFileName) {
           String fileName = inFileName.replace('\\', '/');
  
  
  
  1.94      +24 -21    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java
  
  Index: Validator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java,v
  retrieving revision 1.93
  retrieving revision 1.94
  diff -u -r1.93 -r1.94
  --- Validator.java	21 Mar 2003 03:18:38 -0000	1.93
  +++ Validator.java	24 Mar 2003 21:36:05 -0000	1.94
  @@ -255,7 +255,7 @@
   		     * Report any encoding conflict, treating "UTF-16",
   		     * "UTF-16BE", and "UTF-16LE" as identical.
   		     */
  -		    compareEncodings(value, n, pageInfo);
  +		    comparePageEncodings(value, n, pageInfo);
   		}
   	    }
   
  @@ -301,7 +301,7 @@
   		    if (pageEncodingSeen) 
   			err.jspError(n, "jsp.error.page.multiple.pageencoding");
   		    pageEncodingSeen = true;
  -		    pageInfo.setPageEncoding(value);
  +		    n.getRoot().setPageEncoding(value);
   		}
   	    }
   
  @@ -323,17 +323,19 @@
   	}
   
   	/*
  -	 * Compares the encoding specified in the 'pageEncoding' attribute of
  -	 * the page directive with the encoding explicitly specified in the
  -	 * XML prolog (only for XML syntax) and the encoding specified in
  -	 * the JSP config element whose URL pattern matches the page, and 
  -	 * throws an error in case of a mismatch.
  +	 * Compares the page encoding specified in the 'pageEncoding'
  +	 * attribute of the page directive with the encoding explicitly
  +	 * specified in the XML prolog (only for XML syntax) and the encoding
  +	 * specified in the JSP config element whose URL pattern matches the
  +	 * page, and throws an error in case of a mismatch.
   	 */
  -	private void compareEncodings(String pageDirEnc, Node n,
  -				      PageInfo pageInfo)
  +	private void comparePageEncodings(String pageDirEnc,
  +					  Node.PageDirective n,
  +					  PageInfo pageInfo)
   	            throws JasperException {
   
  -	    String configEnc = pageInfo.getConfigEncoding();
  +	    String configEnc = n.getRoot().getJspConfigPageEncoding();
  +
   	    if (configEnc != null && !pageDirEnc.equals(configEnc) 
   		    && (!pageDirEnc.startsWith("UTF-16")
   			|| !configEnc.startsWith("UTF-16"))) {
  @@ -341,8 +343,9 @@
   			     configEnc, pageDirEnc);
   	    }
   
  -	    if (n.isXmlSyntax() && pageInfo.isEncodingSpecifiedInProlog()) {
  -		String pageEnc = pageInfo.getPageEncoding();
  +	    if (n.getRoot().isXmlSyntax()
  +		    && pageInfo.isEncodingSpecifiedInProlog()) {
  +		String pageEnc = n.getRoot().getPageEncoding();
   		if (!pageDirEnc.equals(pageEnc) 
   		        && (!pageDirEnc.startsWith("UTF-16")
   			    || !pageEnc.startsWith("UTF-16"))) {
  @@ -1053,7 +1056,7 @@
   	    // valid attribute value in xml).
   
               if (value != null) {
  -                if (n.isXmlSyntax() && value.startsWith("%=")) {
  +                if (n.getRoot().isXmlSyntax() && value.startsWith("%=")) {
                       result = new Node.JspAttribute(
                                           qName,
   					uri,
  @@ -1063,7 +1066,7 @@
   					null,
   					dynamic);
                   }
  -                else if(!n.isXmlSyntax() && value.startsWith("<%=")) {
  +                else if(!n.getRoot().isXmlSyntax() && value.startsWith("<%=")) {
                       result = new Node.JspAttribute(
                                           qName,
   					uri,
  @@ -1125,8 +1128,8 @@
   	 * EL expression.
   	 */
   	private boolean isExpression(Node n, String value) {
  -	    if ((n.isXmlSyntax() && value.startsWith("%="))
  -		    || (!n.isXmlSyntax() && value.startsWith("<%="))
  +	    if ((n.getRoot().isXmlSyntax() && value.startsWith("%="))
  +		    || (!n.getRoot().isXmlSyntax() && value.startsWith("<%="))
      		    || (value.indexOf("${") != -1 && !pageInfo.isELIgnored()))
   		return true;
   	    else
  @@ -1208,7 +1211,7 @@
   		    String function = func.getName();
   		    String uri = null;
   
  -		    if (n.isXmlSyntax()) {
  +		    if (n.getRoot().isXmlSyntax()) {
   		        uri = findUri(prefix, n);
   		    } else if (prefix != null) {
   			Hashtable prefixMapper = pageInfo.getPrefixMapper();
  @@ -1314,7 +1317,7 @@
   	    if (isXml) {
   		charset = "UTF-8";
   	    } else {
  -		charset = pageInfo.getPageEncoding();
  +		charset = page.getRoot().getPageEncoding();
   		// The resulting charset might be null
   	    }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org