--- /dev/null
+.classpath
+.settings
+.project
+.djunitplugin
+target
+jcoverage.ser
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
+<project xmlns="http://maven.apache.org/POM/4.0.0"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
\r
<modelVersion>4.0.0</modelVersion>\r
<groupId>jp.sourceforge.stigmata</groupId>\r
<artifactId>digger</artifactId>\r
<packaging>jar</packaging>\r
- <version>3.0.0-SNAPSHOT</version>\r
+ <version>3.0.0</version>\r
<name>digger</name>\r
<description>Dig up class files</description>\r
<url>http://stigmata.sourceforge.jp/digger/</url>\r
super(urls, parent);
}
- public WarClassLoader(URL[] urls){
+ public WarClassLoader(URL... urls){
super(urls);
}
+ public WarClassLoader(ClassLoader parent, URL... urls){
+ this(urls, parent);
+ }
+
+ public WarClassLoader(ClassLoader parent, URLStreamHandlerFactory factory, URL... urls){
+ this(urls, parent, factory);
+ }
+
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException{
Class<?> clazz = null;
if(url.toString().endsWith(".war")){
try{
URL newurl = new URL("jar:" + url + "!/" + path);
- InputStream in = null;
- ByteArrayOutputStream out = null;
- byte[] classdata = null;
- try{
- in = newurl.openStream();
- out = new ByteArrayOutputStream();
- byte[] data = new byte[256];
- int read = 0;
- while((read = in.read(data, 0, data.length)) != -1){
- out.write(data, 0, read);
- }
- classdata = out.toByteArray();
- } finally{
- if(in != null){
- in.close();
- }
- if(out != null){
- out.close();
- }
+ InputStream in = newurl.openStream();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ byte[] data = new byte[256];
+ int read = 0;
+ while((read = in.read(data, 0, data.length)) != -1){
+ out.write(data, 0, read);
}
+ byte[] classdata = out.toByteArray();
+ in.close();
+ out.close();
clazz = defineClass(name, classdata, 0, classdata.length);
break;
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.io.File;
import java.net.MalformedURLException;
/**
*
* @author Haruaki Tamada
- * @version $Revision$
*/
public class ClassFileEntryTest{
private ClasspathContext context;
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.io.File;
import java.net.URL;
* test for ClasspathContext class.
*
* @author Haruaki Tamada
- * @version $Revision$
*/
public class ClasspathContextTest{
private static final String ASM_FILE = "target/asm-3.3.jar";
--- /dev/null
+package jp.sourceforge.stigmata.digger.util;\r
+\r
+import java.io.File;\r
+import java.net.URL;\r
+\r
+import junit.framework.Assert;\r
+\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+\r
+public class WarClassLoaderTest{\r
+ private WarClassLoader loader;\r
+ private URL url;\r
+\r
+ @Before\r
+ public void setUp() throws Exception{\r
+ url = new File("target/test-classes/resources/samplewar.war").toURI().toURL();\r
+ }\r
+\r
+ @Test\r
+ public void testBasic() throws Exception{\r
+ loader = new WarClassLoader(url);\r
+\r
+ URL url1 = loader.findResource("META-INF/MANIFEST.MF");\r
+ Assert.assertNotNull(url1);\r
+\r
+ URL url2 = loader.findResource("src/HelloWorld.java");\r
+ Assert.assertNotNull(url2);\r
+\r
+ Class<?> helloWorld = loader.loadClass("HelloWorld");\r
+ Assert.assertEquals("HelloWorld", helloWorld.getName());\r
+ }\r
+}\r