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.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>


+ 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
*/
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());


+ 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;

/**
* 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;


+ 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
*/
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;
}
}

+ 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.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);
}


+ 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 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));
}


}


Loading…
Cancel
Save