You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/02/13 19:25:07 UTC
svn commit: r909869 - /tomcat/trunk/java/org/apache/jasper/JspC.java
Author: markt
Date: Sat Feb 13 18:25:07 2010
New Revision: 909869
URL: http://svn.apache.org/viewvc?rev=909869&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48371
Skip comments when working out where to insert generated servlets and associated mappings
Modified:
tomcat/trunk/java/org/apache/jasper/JspC.java
Modified: tomcat/trunk/java/org/apache/jasper/JspC.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspC.java?rev=909869&r1=909868&r2=909869&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/JspC.java (original)
+++ tomcat/trunk/java/org/apache/jasper/JspC.java Sat Feb 13 18:25:07 2010
@@ -27,15 +27,18 @@
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
+import java.io.Reader;
import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
+import java.util.Set;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -123,20 +126,31 @@
protected static final String SWITCH_ENCODING = "-javaEncoding";
protected static final String SWITCH_SMAP = "-smap";
protected static final String SWITCH_DUMP_SMAP = "-dumpsmap";
-
protected static final String SHOW_SUCCESS ="-s";
protected static final String LIST_ERRORS = "-l";
protected static final int INC_WEBXML = 10;
protected static final int ALL_WEBXML = 20;
protected static final int DEFAULT_DIE_LEVEL = 1;
protected static final int NO_DIE_LEVEL = 0;
-
- protected static final String[] insertBefore =
- { "</web-app>", "<servlet-mapping>", "<session-config>",
- "<mime-mapping>", "<welcome-file-list>", "<error-page>", "<taglib>",
- "<resource-env-ref>", "<resource-ref>", "<security-constraint>",
- "<login-config>", "<security-role>", "<env-entry>", "<ejb-ref>",
- "<ejb-local-ref>" };
+ protected static final Set<String> insertBefore = new HashSet<String>();
+
+ static {
+ insertBefore.add("</web-app>");
+ insertBefore.add("<servlet-mapping>");
+ insertBefore.add("<session-config>");
+ insertBefore.add("<mime-mapping>");
+ insertBefore.add("<welcome-file-list>");
+ insertBefore.add("<error-page>");
+ insertBefore.add("<taglib>");
+ insertBefore.add("<resource-env-ref>");
+ insertBefore.add("<resource-ref>");
+ insertBefore.add("<security-constraint>");
+ insertBefore.add("<login-config>");
+ insertBefore.add("<security-role>");
+ insertBefore.add("<env-entry>");
+ insertBefore.add("<ejb-ref>");
+ insertBefore.add("<ejb-local-ref>");
+ }
protected static int die;
protected String classPath = null;
@@ -864,66 +878,37 @@
PrintWriter writer = new PrintWriter(new FileWriter(webXml2));
// Insert the <servlet> and <servlet-mapping> declarations
- int pos = -1;
- String line = null;
- while (true) {
- line = reader.readLine();
- if (line == null) {
- break;
- }
- // Skip anything previously generated by JSPC
- if (line.indexOf(insertStartMarker) >= 0) {
- while (true) {
- line = reader.readLine();
- if (line == null) {
- return;
- }
- if (line.indexOf(insertEndMarker) >= 0) {
- line = reader.readLine();
- line = reader.readLine();
+ boolean inserted = false;
+ int current = reader.read();
+ while (current > -1) {
+ if (!inserted && current == '<') {
+ String element = getElement(reader);
+ if (insertBefore.contains(element)) {
+ // Insert generated content here
+ writer.println(insertStartMarker);
+ while (true) {
+ String line = fragmentReader.readLine();
if (line == null) {
- return;
+ writer.println();
+ break;
}
- break;
+ writer.println(line);
+ }
+ writer.println(insertEndMarker);
+ writer.println();
+ writer.write(element);
+ } else if (element.contains(insertStartMarker)) {
+ // Skip the previous auto-generated content
+ while (!element.contains(insertEndMarker)) {
+ element = getElement(reader);
}
+ } else {
+ writer.write(element);
}
- }
- for (int i = 0; i < insertBefore.length; i++) {
- pos = line.indexOf(insertBefore[i]);
- if (pos >= 0)
- break;
- }
- if (pos >= 0) {
- writer.print(line.substring(0, pos));
- break;
} else {
- writer.println(line);
- }
- }
-
- writer.println(insertStartMarker);
- while (true) {
- String line2 = fragmentReader.readLine();
- if (line2 == null) {
- writer.println();
- break;
+ writer.write(current);
}
- writer.println(line2);
- }
- writer.println(insertEndMarker);
- writer.println();
-
- for (int i = 0; i < pos; i++) {
- writer.print(" ");
- }
- writer.println(line.substring(pos));
-
- while (true) {
- line = reader.readLine();
- if (line == null) {
- break;
- }
- writer.println(line);
+ current = reader.read();
}
writer.close();
@@ -949,6 +934,38 @@
(new File(webxmlFile)).delete();
}
+
+ /*
+ * Assumes valid xml
+ */
+ private String getElement(Reader reader) throws IOException {
+ StringBuilder result = new StringBuilder();
+ result.append('<');
+
+ boolean done = false;
+
+ while (!done) {
+ int current = reader.read();
+ while (current != '>') {
+ result.append((char) current);
+ current = reader.read();
+ }
+ result.append((char) current);
+
+ int len = result.length();
+ if (len > 7 && result.substring(0, 4).equals("<!--")) {
+ // This is a comment - make sure we are at the end
+ if (result.substring(len - 3, len).equals("-->")) {
+ done = true;
+ }
+ } else {
+ done = true;
+ }
+ }
+
+
+ return result.toString();
+ }
protected void processFile(String file)
throws JasperException
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org