git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273936 13f79535-47bb-0310-9956-ffa450edef68master
@@ -9,6 +9,7 @@ | |||
<property name="jsp.dir" location="jsp"/> | |||
<property name="jsp.output.dir" location="${jsp.dir}/java"/> | |||
<property name="jsp.verbosity" value="3"/> | |||
<property name="jsp.compiler" value="jasper41"/> | |||
<mkdir dir="${jsp.output.dir}"/> | |||
</target> | |||
@@ -23,6 +24,7 @@ | |||
<jspc | |||
destdir="${jsp.output.dir}" | |||
srcdir="${jsp.dir}" | |||
compiler="${jsp.compiler}" | |||
verbose="${jsp.verbosity}"> | |||
<include | |||
name="missing_tld.jsp"/> | |||
@@ -30,6 +32,7 @@ | |||
</target> | |||
<!-- this should compile to simple.java --> | |||
<!-- also, stick to the default compiler here to ensure it still works--> | |||
<target name="testSimple" depends="init"> | |||
<jspc | |||
destdir="${jsp.output.dir}" | |||
@@ -46,6 +49,7 @@ | |||
destdir="${jsp.output.dir}" | |||
uriroot="${jsp.dir}" | |||
srcdir="${jsp.dir}" | |||
compiler="${jsp.compiler}" | |||
verbose="${jsp.verbosity}"> | |||
<include | |||
name="uriroot.jsp"/> | |||
@@ -58,6 +62,7 @@ | |||
destdir="${jsp.output.dir}" | |||
uriroot="${jsp.dir}" | |||
srcdir="${jsp.dir}" | |||
compiler="${jsp.compiler}" | |||
verbose="${jsp.verbosity}"> | |||
<include name="xml.jsp"/> | |||
</jspc> | |||
@@ -68,6 +73,7 @@ | |||
<jspc | |||
destdir="${jsp.output.dir}" | |||
srcdir="${jsp.dir}" | |||
compiler="${jsp.compiler}" | |||
verbose="${jsp.verbosity}"> | |||
<include | |||
name="default.jsp"/> | |||
@@ -79,6 +85,7 @@ | |||
<jspc | |||
destdir="${jsp.output.dir}" | |||
srcdir="${jsp.dir}" | |||
compiler="${jsp.compiler}" | |||
verbose="${jsp.verbosity}"> | |||
<include | |||
name="1nvalid-classname.jsp"/> | |||
@@ -90,6 +97,7 @@ | |||
<jspc | |||
destdir="${jsp.output.dir}" | |||
srcdir="${jsp.dir}" | |||
compiler="${jsp.compiler}" | |||
verbose="${jsp.verbosity}"> | |||
<include | |||
name="wrong_type.txt"/> | |||
@@ -100,6 +108,7 @@ | |||
<target name="testWebapp" depends="init"> | |||
<jspc | |||
destdir="${jsp.output.dir}" | |||
compiler="${jsp.compiler}" | |||
verbose="${jsp.verbosity}"> | |||
<webapp basedir="${jsp.dir}" /> | |||
</jspc> | |||
@@ -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 <code>true</code>. | |||
@@ -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()); | |||
@@ -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; | |||
@@ -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; | |||
} | |||
} |
@@ -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 <a href="mailto:jayglanville@home.com">J D Glanville</a> | |||
* @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a> | |||
* @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); | |||
} | |||
@@ -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)); | |||
} | |||
} | |||