From 4287355cb2c20aba90c85ab13e6921b20f9bf62f Mon Sep 17 00:00:00 2001 From: Haruaki Tamada Date: Fri, 6 May 2011 17:24:46 +0900 Subject: [PATCH] =?utf8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=B1=E3=83=BC?= =?utf8?q?=E3=82=B9=E3=81=AE=E5=85=85=E5=AE=9F=EF=BC=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++++ pom.xml | 6 ++-- .../stigmata/digger/util/WarClassLoader.java | 38 ++++++++++------------ .../stigmata/digger/ClassFileEntryTest.java | 5 --- .../stigmata/digger/ClasspathContextTest.java | 5 --- .../stigmata/digger/util/WarClassLoaderTest.java | 33 +++++++++++++++++++ 6 files changed, 61 insertions(+), 32 deletions(-) create mode 100644 .gitignore create mode 100755 src/test/java/jp/sourceforge/stigmata/digger/util/WarClassLoaderTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fb5e61d --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.classpath +.settings +.project +.djunitplugin +target +jcoverage.ser diff --git a/pom.xml b/pom.xml index cdad674..8193aab 100644 --- a/pom.xml +++ b/pom.xml @@ -1,10 +1,12 @@ - + 4.0.0 jp.sourceforge.stigmata digger jar - 3.0.0-SNAPSHOT + 3.0.0 digger Dig up class files http://stigmata.sourceforge.jp/digger/ diff --git a/src/main/java/jp/sourceforge/stigmata/digger/util/WarClassLoader.java b/src/main/java/jp/sourceforge/stigmata/digger/util/WarClassLoader.java index 34cbed1..54e9a42 100644 --- a/src/main/java/jp/sourceforge/stigmata/digger/util/WarClassLoader.java +++ b/src/main/java/jp/sourceforge/stigmata/digger/util/WarClassLoader.java @@ -25,10 +25,18 @@ public class WarClassLoader extends URLClassLoader{ 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; @@ -40,26 +48,16 @@ public class WarClassLoader extends URLClassLoader{ 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; diff --git a/src/test/java/jp/sourceforge/stigmata/digger/ClassFileEntryTest.java b/src/test/java/jp/sourceforge/stigmata/digger/ClassFileEntryTest.java index 7c563e8..9e0271c 100644 --- a/src/test/java/jp/sourceforge/stigmata/digger/ClassFileEntryTest.java +++ b/src/test/java/jp/sourceforge/stigmata/digger/ClassFileEntryTest.java @@ -1,9 +1,5 @@ package jp.sourceforge.stigmata.digger; -/* - * $Id$ - */ - import java.io.File; import java.net.MalformedURLException; @@ -14,7 +10,6 @@ import org.junit.Test; /** * * @author Haruaki Tamada - * @version $Revision$ */ public class ClassFileEntryTest{ private ClasspathContext context; diff --git a/src/test/java/jp/sourceforge/stigmata/digger/ClasspathContextTest.java b/src/test/java/jp/sourceforge/stigmata/digger/ClasspathContextTest.java index dde0e20..55267b4 100644 --- a/src/test/java/jp/sourceforge/stigmata/digger/ClasspathContextTest.java +++ b/src/test/java/jp/sourceforge/stigmata/digger/ClasspathContextTest.java @@ -1,9 +1,5 @@ package jp.sourceforge.stigmata.digger; -/* - * $Id$ - */ - import java.io.File; import java.net.URL; @@ -15,7 +11,6 @@ import org.junit.Test; * test for ClasspathContext class. * * @author Haruaki Tamada - * @version $Revision$ */ public class ClasspathContextTest{ private static final String ASM_FILE = "target/asm-3.3.jar"; diff --git a/src/test/java/jp/sourceforge/stigmata/digger/util/WarClassLoaderTest.java b/src/test/java/jp/sourceforge/stigmata/digger/util/WarClassLoaderTest.java new file mode 100755 index 0000000..590bf69 --- /dev/null +++ b/src/test/java/jp/sourceforge/stigmata/digger/util/WarClassLoaderTest.java @@ -0,0 +1,33 @@ +package jp.sourceforge.stigmata.digger.util; + +import java.io.File; +import java.net.URL; + +import junit.framework.Assert; + +import org.junit.Before; +import org.junit.Test; + +public class WarClassLoaderTest{ + private WarClassLoader loader; + private URL url; + + @Before + public void setUp() throws Exception{ + url = new File("target/test-classes/resources/samplewar.war").toURI().toURL(); + } + + @Test + public void testBasic() throws Exception{ + loader = new WarClassLoader(url); + + URL url1 = loader.findResource("META-INF/MANIFEST.MF"); + Assert.assertNotNull(url1); + + URL url2 = loader.findResource("src/HelloWorld.java"); + Assert.assertNotNull(url2); + + Class helloWorld = loader.loadClass("HelloWorld"); + Assert.assertEquals("HelloWorld", helloWorld.getName()); + } +} -- 2.11.0