diff --git a/src/etc/testcases/taskdefs/optional/jspc.xml b/src/etc/testcases/taskdefs/optional/jspc.xml
index cfd1cdfc2..d437d8767 100644
--- a/src/etc/testcases/taskdefs/optional/jspc.xml
+++ b/src/etc/testcases/taskdefs/optional/jspc.xml
@@ -9,6 +9,7 @@
+
@@ -23,6 +24,7 @@
@@ -30,6 +32,7 @@
+
@@ -58,6 +62,7 @@
destdir="${jsp.output.dir}"
uriroot="${jsp.dir}"
srcdir="${jsp.dir}"
+ compiler="${jsp.compiler}"
verbose="${jsp.verbosity}">
@@ -68,6 +73,7 @@
@@ -79,6 +85,7 @@
@@ -90,6 +97,7 @@
@@ -100,6 +108,7 @@
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
index 7d1ec1acd..3f0e98278 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
@@ -106,7 +106,6 @@ import org.apache.tools.ant.types.Reference;
* @since 1.5
*/
public class JspC extends MatchingTask {
- /* ------------------------------------------------------------ */
private Path classpath;
private Path compilerClasspath;
private Path src;
@@ -155,11 +154,11 @@ public class JspC extends MatchingTask {
private static final String FAIL_MSG
= "Compile failed, messages should have been provided.";
- /* ------------------------------------------------------------ */
+
/**
- * Path for source JSP files.
+ * Set the path for source JSP files.
*/
- public void setSrcdir(Path srcDir) {
+ public void setSrcDir(Path srcDir) {
if (src == null) {
src = srcDir;
} else {
@@ -169,7 +168,7 @@ public class JspC extends MatchingTask {
public Path getSrcDir(){
return src;
}
- /* ------------------------------------------------------------ */
+
/**
* Set the destination directory into which the JSP source
* files should be compiled.
@@ -180,7 +179,6 @@ public class JspC extends MatchingTask {
public File getDestdir(){
return destDir;
}
- /* ------------------------------------------------------------ */
/**
* Set the name of the package the compiled jsp files should be in.
@@ -193,7 +191,6 @@ public class JspC extends MatchingTask {
return packageName;
}
- /* ------------------------------------------------------------ */
/**
* Set the verbose level of the compiler
*/
@@ -204,7 +201,6 @@ public class JspC extends MatchingTask {
return verbose;
}
- /* ------------------------------------------------------------ */
/**
* Whether or not the build should halt if compilation fails.
* Defaults to true
.
@@ -218,15 +214,15 @@ public class JspC extends MatchingTask {
public boolean getFailonerror() {
return failOnError;
}
- /* ------------------------------------------------------------ */
+
public String getIeplugin() {
return iepluginid;
}
/**
* Java Plugin CLASSID for Internet Explorer
*/
- public void setIeplugin(String iepluginid_) {
- iepluginid = iepluginid_;
+ public void setIeplugin(String iepluginid) {
+ this.iepluginid = iepluginid;
}
/**
@@ -237,12 +233,13 @@ public class JspC extends MatchingTask {
public boolean isMapped() {
return mapped;
}
+
/**
* If true, generate separate write() calls for each HTML line
* in the JSP.
*/
- public void setMapped(boolean mapped_) {
- mapped = mapped_;
+ public void setMapped(boolean mapped) {
+ this.mapped = mapped;
}
/**
@@ -426,12 +423,12 @@ public class JspC extends MatchingTask {
// make sure that we've got a srcdir
if (src == null) {
throw new BuildException("srcdir attribute must be set!",
- location);
- }
+ getLocation());
+ }
String [] list = src.list();
if (list.length == 0) {
throw new BuildException("srcdir attribute must be set!",
- location);
+ getLocation());
}
@@ -449,7 +446,7 @@ public class JspC extends MatchingTask {
resetFileLists();
int filecount = 0;
for (int i = 0; i < list.length; i++) {
- File srcDir = (File) getProject().resolveFile(list[i]);
+ File srcDir = getProject().resolveFile(list[i]);
if (!srcDir.exists()) {
throw new BuildException("srcdir \"" + srcDir.getPath() +
"\" does not exist!", getLocation());
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java
index d511cf7b9..abd2025e6 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java
@@ -55,7 +55,7 @@ package org.apache.tools.ant.taskdefs.optional.jsp;
import java.io.File;
/**
- * This is a class derived from the Jasper code
+ * This is a class derived from the Jasper code
* (org.apache.jasper.compiler.CommandLineCompiler) to map from a JSP filename
* to a valid Java classname.
*
@@ -159,7 +159,7 @@ public class JspNameMangler implements JspMangler {
* definition of the char escaping algorithm
*
* @param ch char to mangle
- * @return mangled string; 5 digit hex value
+ * @return mangled string; 5 digit hex value
*/
private static final String mangleChar(char ch) {
@@ -183,7 +183,7 @@ public class JspNameMangler implements JspMangler {
/**
* taking in the substring representing the path relative to the source dir
* return a new string representing the destination path
- * @todo
+ * not supported, as jasper in tomcat4.0 doesnt either
*/
public String mapPath(String path) {
return null;
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java
index f256ce381..78452516b 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java
@@ -73,6 +73,17 @@ import org.apache.tools.ant.types.Path;
* @since ant1.5
*/
public class JasperC extends DefaultJspCompilerAdapter {
+
+
+ /**
+ * what produces java classes from .jsp files
+ */
+ JspMangler mangler;
+
+ public JasperC(JspMangler mangler) {
+ this.mangler = mangler;
+ }
+
/**
* our execute method
*/
@@ -80,28 +91,11 @@ public class JasperC extends DefaultJspCompilerAdapter {
throws BuildException {
getJspc().log("Using jasper compiler", Project.MSG_VERBOSE);
CommandlineJava cmd = setupJasperCommand();
- /*
- Path classpath=cmd.createClasspath(getProject());
- if (getJspc().getClasspath() != null) {
- classpath=getJspc().getClasspath();
- } else {
- classpath.concatSystemClasspath();
- }
- ExecuteJava exec=new ExecuteJava();
- exec.execute(getProject());
- if ((err = executeJava()) != 0) {
- if (failOnError) {
- throw new BuildException("Java returned: " + err, location);
- } else {
- log("Java Result: " + err, Project.MSG_ERR);
- }
- */
try {
// Create an instance of the compiler, redirecting output to
// the project log
- // REVISIT. ugly.
Java java = (Java) (getProject().createTask("java"));
if (getJspc().getClasspath() != null) {
getProject().log("using user supplied classpath: "+getJspc().getClasspath(),
@@ -175,6 +169,6 @@ public class JasperC extends DefaultJspCompilerAdapter {
*/
public JspMangler createMangler() {
- return new JspNameMangler();
+ return mangler;
}
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
index 8c5deba99..5776a244d 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
@@ -56,6 +56,8 @@ package org.apache.tools.ant.taskdefs.optional.jsp.compilers;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.optional.jsp.JspNameMangler;
+import org.apache.tools.ant.taskdefs.optional.jsp.Jasper41Mangler;
/**
@@ -63,6 +65,7 @@ import org.apache.tools.ant.Task;
*
* @author J D Glanville
* @author Matthew Watson mattw@i3sp.com
+ * @author Steve Loughran
*/
public class JspCompilerAdapterFactory {
@@ -112,11 +115,14 @@ public class JspCompilerAdapterFactory {
public static JspCompilerAdapter getCompiler(String compilerType, Task task,
AntClassLoader loader)
throws BuildException {
- /* If I've done things right, this should be the extent of the
- * conditional statements required.
- */
+
if (compilerType.equalsIgnoreCase("jasper")) {
- return new JasperC();
+ //tomcat4.0 gets the old mangler
+ return new JasperC(new JspNameMangler());
+ }
+ if (compilerType.equalsIgnoreCase("jasper41")) {
+ //tomcat4.1 gets the new one
+ return new JasperC(new Jasper41Mangler());
}
return resolveClassName(compilerType, loader);
}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java
index f5bcca520..16cae919c 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java
@@ -57,6 +57,12 @@ import java.io.*;
import java.util.Properties;
import org.apache.tools.ant.BuildFileTest;
+import org.apache.tools.ant.taskdefs.optional.jsp.JspMangler;
+import org.apache.tools.ant.taskdefs.optional.jsp.Jasper41Mangler;
+import org.apache.tools.ant.taskdefs.optional.jsp.JspC;
+import org.apache.tools.ant.taskdefs.optional.jsp.JspNameMangler;
+import org.apache.tools.ant.taskdefs.optional.jsp.compilers.JspCompilerAdapterFactory;
+import org.apache.tools.ant.taskdefs.optional.jsp.compilers.JspCompilerAdapter;
/**
* Tests the Jspc task.
@@ -163,7 +169,22 @@ public class JspcTest extends BuildFileTest {
}
+ /**
+ * A unit test for JUnit
+ */
+ public void testNotAJspFile() throws Exception {
+ executeTarget("testNotAJspFile");
+ }
+ /**
+ * webapp test is currently broken, because it picks up
+ * on the missing_tld file, and bails.
+ */
+/*
+ public void testWebapp() throws Exception {
+ executeTarget("testWebapp");
+ }
+*/
/**
* run a target then verify the named file gets created
*
@@ -191,7 +212,6 @@ public class JspcTest extends BuildFileTest {
assertTrue("file " + filename + " is empty", file.length() > 0);
}
-
/**
* Gets the OutputFile attribute of the JspcTest object
*
@@ -201,5 +221,48 @@ public class JspcTest extends BuildFileTest {
protected File getOutputFile(String subpath) {
return new File(outDir, subpath);
}
+
+ /**
+ * verify that we select the appropriate mangler
+ */
+ public void testJasperNameManglerSelection() {
+ JspCompilerAdapter adapter=
+ JspCompilerAdapterFactory.getCompiler("jasper", null,null);
+ JspMangler mangler=adapter.createMangler();
+ assertTrue(mangler instanceof JspNameMangler);
+ adapter= JspCompilerAdapterFactory.getCompiler("jasper41", null, null);
+ mangler = adapter.createMangler();
+ assertTrue(mangler instanceof Jasper41Mangler);
+ }
+
+ public void testJasper41() {
+ JspMangler mangler = new Jasper41Mangler();
+ //java keywords are not special
+ assertMapped(mangler, "for.jsp", "for_jsp");
+ //underscores go in front of invalid start chars
+ assertMapped(mangler, "0.jsp", "_0_jsp");
+ //underscores at the front get an underscore too
+ assertMapped(mangler, "_.jsp", "___jsp");
+ //non java char at start => underscore then the the _hex value
+ assertMapped(mangler, "-.jsp", "__0002d_jsp");
+ //and paths are stripped
+ char s = File.separatorChar;
+ assertMapped(mangler, "" + s + s + "somewhere" + s + "file" + s + "index.jsp", "index_jsp");
+ }
+
+ /**
+ * assert our mapping rules
+ * @param mangler
+ * @param filename
+ * @param classname
+ */
+ protected void assertMapped(JspMangler mangler, String filename, String classname) {
+ String mappedname = mangler.mapJspToJavaName(new File(filename));
+ assertTrue(filename+" should have mapped to "+classname
+ +" but instead mapped to "+mappedname,
+ classname.equals(mappedname));
+ }
+
+
}