Browse Source

jasper4.1 name mangling support via new name mangler, a new compiler in the factory (jasper41), and various new tests.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273936 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 22 years ago
parent
commit
f3a629c227
6 changed files with 112 additions and 43 deletions
  1. +9
    -0
      src/etc/testcases/taskdefs/optional/jspc.xml
  2. +14
    -17
      src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
  3. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java
  4. +12
    -18
      src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java
  5. +10
    -4
      src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
  6. +64
    -1
      src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java

+ 9
- 0
src/etc/testcases/taskdefs/optional/jspc.xml View File

@@ -9,6 +9,7 @@
<property name="jsp.dir" location="jsp"/> <property name="jsp.dir" location="jsp"/>
<property name="jsp.output.dir" location="${jsp.dir}/java"/> <property name="jsp.output.dir" location="${jsp.dir}/java"/>
<property name="jsp.verbosity" value="3"/> <property name="jsp.verbosity" value="3"/>
<property name="jsp.compiler" value="jasper41"/>
<mkdir dir="${jsp.output.dir}"/> <mkdir dir="${jsp.output.dir}"/>
</target> </target>
@@ -23,6 +24,7 @@
<jspc <jspc
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
srcdir="${jsp.dir}" srcdir="${jsp.dir}"
compiler="${jsp.compiler}"
verbose="${jsp.verbosity}"> verbose="${jsp.verbosity}">
<include <include
name="missing_tld.jsp"/> name="missing_tld.jsp"/>
@@ -30,6 +32,7 @@
</target> </target>


<!-- this should compile to simple.java --> <!-- this should compile to simple.java -->
<!-- also, stick to the default compiler here to ensure it still works-->
<target name="testSimple" depends="init"> <target name="testSimple" depends="init">
<jspc <jspc
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
@@ -46,6 +49,7 @@
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
uriroot="${jsp.dir}" uriroot="${jsp.dir}"
srcdir="${jsp.dir}" srcdir="${jsp.dir}"
compiler="${jsp.compiler}"
verbose="${jsp.verbosity}"> verbose="${jsp.verbosity}">
<include <include
name="uriroot.jsp"/> name="uriroot.jsp"/>
@@ -58,6 +62,7 @@
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
uriroot="${jsp.dir}" uriroot="${jsp.dir}"
srcdir="${jsp.dir}" srcdir="${jsp.dir}"
compiler="${jsp.compiler}"
verbose="${jsp.verbosity}"> verbose="${jsp.verbosity}">
<include name="xml.jsp"/> <include name="xml.jsp"/>
</jspc> </jspc>
@@ -68,6 +73,7 @@
<jspc <jspc
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
srcdir="${jsp.dir}" srcdir="${jsp.dir}"
compiler="${jsp.compiler}"
verbose="${jsp.verbosity}"> verbose="${jsp.verbosity}">
<include <include
name="default.jsp"/> name="default.jsp"/>
@@ -79,6 +85,7 @@
<jspc <jspc
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
srcdir="${jsp.dir}" srcdir="${jsp.dir}"
compiler="${jsp.compiler}"
verbose="${jsp.verbosity}"> verbose="${jsp.verbosity}">
<include <include
name="1nvalid-classname.jsp"/> name="1nvalid-classname.jsp"/>
@@ -90,6 +97,7 @@
<jspc <jspc
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
srcdir="${jsp.dir}" srcdir="${jsp.dir}"
compiler="${jsp.compiler}"
verbose="${jsp.verbosity}"> verbose="${jsp.verbosity}">
<include <include
name="wrong_type.txt"/> name="wrong_type.txt"/>
@@ -100,6 +108,7 @@
<target name="testWebapp" depends="init"> <target name="testWebapp" depends="init">
<jspc <jspc
destdir="${jsp.output.dir}" destdir="${jsp.output.dir}"
compiler="${jsp.compiler}"
verbose="${jsp.verbosity}"> verbose="${jsp.verbosity}">
<webapp basedir="${jsp.dir}" /> <webapp basedir="${jsp.dir}" />
</jspc> </jspc>


+ 14
- 17
src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java View File

@@ -106,7 +106,6 @@ import org.apache.tools.ant.types.Reference;
* @since 1.5 * @since 1.5
*/ */
public class JspC extends MatchingTask { public class JspC extends MatchingTask {
/* ------------------------------------------------------------ */
private Path classpath; private Path classpath;
private Path compilerClasspath; private Path compilerClasspath;
private Path src; private Path src;
@@ -155,11 +154,11 @@ public class JspC extends MatchingTask {


private static final String FAIL_MSG private static final String FAIL_MSG
= "Compile failed, messages should have been provided."; = "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) { if (src == null) {
src = srcDir; src = srcDir;
} else { } else {
@@ -169,7 +168,7 @@ public class JspC extends MatchingTask {
public Path getSrcDir(){ public Path getSrcDir(){
return src; return src;
} }
/* ------------------------------------------------------------ */
/** /**
* Set the destination directory into which the JSP source * Set the destination directory into which the JSP source
* files should be compiled. * files should be compiled.
@@ -180,7 +179,6 @@ public class JspC extends MatchingTask {
public File getDestdir(){ public File getDestdir(){
return destDir; return destDir;
} }
/* ------------------------------------------------------------ */


/** /**
* Set the name of the package the compiled jsp files should be in. * Set the name of the package the compiled jsp files should be in.
@@ -193,7 +191,6 @@ public class JspC extends MatchingTask {
return packageName; return packageName;
} }


/* ------------------------------------------------------------ */
/** /**
* Set the verbose level of the compiler * Set the verbose level of the compiler
*/ */
@@ -204,7 +201,6 @@ public class JspC extends MatchingTask {
return verbose; return verbose;
} }


/* ------------------------------------------------------------ */
/** /**
* Whether or not the build should halt if compilation fails. * Whether or not the build should halt if compilation fails.
* Defaults to <code>true</code>. * Defaults to <code>true</code>.
@@ -218,15 +214,15 @@ public class JspC extends MatchingTask {
public boolean getFailonerror() { public boolean getFailonerror() {
return failOnError; return failOnError;
} }
/* ------------------------------------------------------------ */
public String getIeplugin() { public String getIeplugin() {
return iepluginid; return iepluginid;
} }
/** /**
* Java Plugin CLASSID for Internet Explorer * 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() { public boolean isMapped() {
return mapped; return mapped;
} }

/** /**
* If true, generate separate write() calls for each HTML line * If true, generate separate write() calls for each HTML line
* in the JSP. * 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 // make sure that we've got a srcdir
if (src == null) { if (src == null) {
throw new BuildException("srcdir attribute must be set!", throw new BuildException("srcdir attribute must be set!",
location);
}
getLocation());
}
String [] list = src.list(); String [] list = src.list();
if (list.length == 0) { if (list.length == 0) {
throw new BuildException("srcdir attribute must be set!", throw new BuildException("srcdir attribute must be set!",
location);
getLocation());
} }




@@ -449,7 +446,7 @@ public class JspC extends MatchingTask {
resetFileLists(); resetFileLists();
int filecount = 0; int filecount = 0;
for (int i = 0; i < list.length; i++) { for (int i = 0; i < list.length; i++) {
File srcDir = (File) getProject().resolveFile(list[i]);
File srcDir = getProject().resolveFile(list[i]);
if (!srcDir.exists()) { if (!srcDir.exists()) {
throw new BuildException("srcdir \"" + srcDir.getPath() + throw new BuildException("srcdir \"" + srcDir.getPath() +
"\" does not exist!", getLocation()); "\" does not exist!", getLocation());


+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java View File

@@ -55,7 +55,7 @@ package org.apache.tools.ant.taskdefs.optional.jsp;
import java.io.File; 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 * (org.apache.jasper.compiler.CommandLineCompiler) to map from a JSP filename
* to a valid Java classname. * to a valid Java classname.
* *
@@ -159,7 +159,7 @@ public class JspNameMangler implements JspMangler {
* definition of the char escaping algorithm * definition of the char escaping algorithm
* *
* @param ch char to mangle * @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) { 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 * taking in the substring representing the path relative to the source dir
* return a new string representing the destination path * return a new string representing the destination path
* @todo
* not supported, as jasper in tomcat4.0 doesnt either
*/ */
public String mapPath(String path) { public String mapPath(String path) {
return null; return null;


+ 12
- 18
src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java View File

@@ -73,6 +73,17 @@ import org.apache.tools.ant.types.Path;
* @since ant1.5 * @since ant1.5
*/ */
public class JasperC extends DefaultJspCompilerAdapter { public class JasperC extends DefaultJspCompilerAdapter {


/**
* what produces java classes from .jsp files
*/
JspMangler mangler;

public JasperC(JspMangler mangler) {
this.mangler = mangler;
}

/** /**
* our execute method * our execute method
*/ */
@@ -80,28 +91,11 @@ public class JasperC extends DefaultJspCompilerAdapter {
throws BuildException { throws BuildException {
getJspc().log("Using jasper compiler", Project.MSG_VERBOSE); getJspc().log("Using jasper compiler", Project.MSG_VERBOSE);
CommandlineJava cmd = setupJasperCommand(); 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 { try {
// Create an instance of the compiler, redirecting output to // Create an instance of the compiler, redirecting output to
// the project log // the project log
// REVISIT. ugly.
Java java = (Java) (getProject().createTask("java")); Java java = (Java) (getProject().createTask("java"));
if (getJspc().getClasspath() != null) { if (getJspc().getClasspath() != null) {
getProject().log("using user supplied classpath: "+getJspc().getClasspath(), getProject().log("using user supplied classpath: "+getJspc().getClasspath(),
@@ -175,6 +169,6 @@ public class JasperC extends DefaultJspCompilerAdapter {
*/ */


public JspMangler createMangler() { public JspMangler createMangler() {
return new JspNameMangler();
return mangler;
} }
} }

+ 10
- 4
src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java View File

@@ -56,6 +56,8 @@ package org.apache.tools.ant.taskdefs.optional.jsp.compilers;
import org.apache.tools.ant.AntClassLoader; import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task; 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 <a href="mailto:jayglanville@home.com">J D Glanville</a>
* @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a> * @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a>
* @author Steve Loughran
*/ */
public class JspCompilerAdapterFactory { public class JspCompilerAdapterFactory {


@@ -112,11 +115,14 @@ public class JspCompilerAdapterFactory {
public static JspCompilerAdapter getCompiler(String compilerType, Task task, public static JspCompilerAdapter getCompiler(String compilerType, Task task,
AntClassLoader loader) AntClassLoader loader)
throws BuildException { throws BuildException {
/* If I've done things right, this should be the extent of the
* conditional statements required.
*/

if (compilerType.equalsIgnoreCase("jasper")) { 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); return resolveClassName(compilerType, loader);
} }


+ 64
- 1
src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java View File

@@ -57,6 +57,12 @@ import java.io.*;
import java.util.Properties; import java.util.Properties;


import org.apache.tools.ant.BuildFileTest; 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. * 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 * 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); assertTrue("file " + filename + " is empty", file.length() > 0);
} }



/** /**
* Gets the OutputFile attribute of the JspcTest object * Gets the OutputFile attribute of the JspcTest object
* *
@@ -201,5 +221,48 @@ public class JspcTest extends BuildFileTest {
protected File getOutputFile(String subpath) { protected File getOutputFile(String subpath) {
return new File(outDir, 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));
}


} }



Loading…
Cancel
Save