Author: musachy
Date: Thu Aug 6 23:10:27 2009
New Revision: 801835
URL: http://svn.apache.org/viewvc?rev=801835&view=rev
Log:
improve classpath building and add test for JSTL
Added:
struts/sandbox/trunk/struts2-jsp-plugin/src/test/resources/org/apache/struts2/jstl.jsp
Modified:
struts/sandbox/trunk/struts2-jsp-plugin/pom.xml
struts/sandbox/trunk/struts2-jsp-plugin/src/main/java/org/apache/struts2/JSPLoader.java
struts/sandbox/trunk/struts2-jsp-plugin/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
Modified: struts/sandbox/trunk/struts2-jsp-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jsp-plugin/pom.xml?rev=801835&r1=801834&r2=801835&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-jsp-plugin/pom.xml (original)
+++ struts/sandbox/trunk/struts2-jsp-plugin/pom.xml Thu Aug 6 23:10:27 2009
@@ -79,6 +79,19 @@
<version>1.0</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>taglibs</groupId>
+ <artifactId>standard</artifactId>
+ <version>1.1.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ <version>1.1.2</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<!--<build>
Modified:
struts/sandbox/trunk/struts2-jsp-plugin/src/main/java/org/apache/struts2/JSPLoader.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jsp-plugin/src/main/java/org/apache/struts2/JSPLoader.java?rev=801835&r1=801834&r2=801835&view=diff
==============================================================================
---
struts/sandbox/trunk/struts2-jsp-plugin/src/main/java/org/apache/struts2/JSPLoader.java
(original)
+++
struts/sandbox/trunk/struts2-jsp-plugin/src/main/java/org/apache/struts2/JSPLoader.java
Thu Aug 6 23:10:27 2009
@@ -21,8 +21,10 @@
package org.apache.struts2;
import com.opensymphony.xwork2.util.finder.ClassLoaderInterfaceDelegate;
+import com.opensymphony.xwork2.util.finder.UrlSet;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import com.opensymphony.xwork2.util.URLUtil;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.xwork.StringUtils;
import org.apache.struts2.compiler.MemoryClassLoader;
@@ -45,7 +47,11 @@
import java.util.*;
/**
- * Uses jasper to extract a JSP from the classpath to a file and compile it
+ * Uses jasper to extract a JSP from the classpath to a file and compile it.
The classpathc used for
+ * compilation is built by finding all the jar files using the current class
loader (Thread), then adding
+ * the plugin jar and the jars that contain these classes:
+ * javax.servlet.Servlet
+ * javax.servlet.jsp.JspPage
*/
public class JSPLoader {
private static final Logger LOG = LoggerFactory.getLogger(JSPLoader.class);
@@ -95,7 +101,7 @@
* Compiles the given source code into java bytecode
*
*/
- private void compileJava(String className, final String source,
Set<String> extraClassPath) {
+ private void compileJava(String className, final String source,
Set<String> extraClassPath) throws IOException {
JavaCompiler compiler =
ToolProvider.getSystemJavaCompiler();
@@ -133,28 +139,34 @@
//build classpath
List<String> optionList = new ArrayList<String>();
- StringBuilder classPath = new StringBuilder();
+ Set<String> classPath = new HashSet<String>();
+
+ //find available jars
+ UrlSet urlSet = new UrlSet(getClassLoaderInterface());
+ urlSet = urlSet.matching(".*?\\.jar(!/)?$");
+ List<URL> urls = urlSet.getUrls();
+ if (urls != null) {
+ for (URL url : urls) {
+ File file =
FileUtils.toFile(URLUtil.normalizeToFileProtocol(url));
+ classPath.add(file.getAbsolutePath());
+ }
+ }
+
+
//this jar
- classPath.append(getJarUrl(EmbeddedJSPResult.class));
- classPath.append(";");
+ classPath.add(getJarUrl(EmbeddedJSPResult.class));
//servlet api
- classPath.append(getJarUrl(Servlet.class));
- classPath.append(";");
+ classPath.add(getJarUrl(Servlet.class));
//jsp api
- classPath.append(getJarUrl(JspPage.class));
-
- if (!extraClassPath.isEmpty())
- classPath.append(";");
+ classPath.add(getJarUrl(JspPage.class));
//add extra classpath entries (jars where tlds were found will be here)
for (Iterator<String> iterator = extraClassPath.iterator();
iterator.hasNext();) {
String entry = iterator.next();
- classPath.append(entry);
- if (iterator.hasNext())
- classPath.append(";");
+ classPath.add(entry);
}
- optionList.addAll(Arrays.asList("-classpath", classPath.toString()));
+ optionList.addAll(Arrays.asList("-classpath",
StringUtils.join(classPath, ";")));
//compile
@@ -177,8 +189,7 @@
private JspC compileJSP(String location) throws JasperException {
JspC jspC = new JspC();
- //TODO: get this from context so OSGI works
- jspC.setClassLoaderInterface(new
ClassLoaderInterfaceDelegate(Thread.currentThread().getContextClassLoader()));
+ jspC.setClassLoaderInterface(getClassLoaderInterface());
jspC.setCompile(false);
jspC.setJspFiles(location);
jspC.setPackage(DEFAULT_PACKAGE);
@@ -186,6 +197,11 @@
return jspC;
}
+ private ClassLoaderInterfaceDelegate getClassLoaderInterface() {
+ //TODO: get this from context so OSGI works
+ return new
ClassLoaderInterfaceDelegate(Thread.currentThread().getContextClassLoader());
+ }
+
private static URI toURI(String name) {
try {
return new URI(name);
Modified:
struts/sandbox/trunk/struts2-jsp-plugin/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jsp-plugin/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java?rev=801835&r1=801834&r2=801835&view=diff
==============================================================================
---
struts/sandbox/trunk/struts2-jsp-plugin/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
(original)
+++
struts/sandbox/trunk/struts2-jsp-plugin/src/test/java/org/apache/struts2/EmbeddedJSPResultTest.java
Thu Aug 6 23:10:27 2009
@@ -95,6 +95,13 @@
}
}
+ public void testJSTL() throws Exception {
+ result.setLocation("org/apache/struts2/jstl.jsp");
+ result.execute(null);
+
+ assertEquals("XXXXXXXXXXX", cleanup(response.getContentAsString()));
+ }
+
public void testCachedInstances() throws InterruptedException {
ServletCache cache = new ServletCache();
Added:
struts/sandbox/trunk/struts2-jsp-plugin/src/test/resources/org/apache/struts2/jstl.jsp
URL:
http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-jsp-plugin/src/test/resources/org/apache/struts2/jstl.jsp?rev=801835&view=auto
==============================================================================
---
struts/sandbox/trunk/struts2-jsp-plugin/src/test/resources/org/apache/struts2/jstl.jsp
(added)
+++
struts/sandbox/trunk/struts2-jsp-plugin/src/test/resources/org/apache/struts2/jstl.jsp
Thu Aug 6 23:10:27 2009
@@ -0,0 +1,6 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<c:set var="number" value="10"/>
+<c:forEach begin="0" end="${number}">
+X
+</c:forEach>
\ No newline at end of file