diff --git a/Changes.md b/Changes.md index 1af37368..9ec48803 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,11 @@ ### Changes +### version 3.32 on June 21, 2026 + +* Excludes javassist.tools.{reflect,rmi,web}. They are now included in ./examples/src/main. + +* Disables javassist.runtime.Desc.useContextClassLoader + ### version 3.31.0 on April 20, 2026 * GitHub PR #480, #484, #486, #491, #492, #495, #506 diff --git a/Examples.md b/Examples.md index 755ae9e2..b7453b6d 100644 --- a/Examples.md +++ b/Examples.md @@ -1,14 +1,24 @@ How to run program examples --------------------------- +**Security notice:** +_All the programs are for demonstration only. They are not for production. +Additional security considerations and precautions are required +when applying these program in a production environment._ + JDK 1.4 or later is needed. ### 0. If you have Apache Ant Run the sample-all task. + +``` +% ant sample-all +``` + Otherwise, follow the instructions below. -### 1. Move to the directory where this `Examples.md` file is located. +### 1. Move to the directory `./examples`. In the following instructions, we assume that the `javassist.jar` file is included in the class path. @@ -16,7 +26,7 @@ For example, the javac and java commands must receive the following `classpath` option: ``` --classpath ".:javassist.jar" +-classpath "./target:../javassist.jar" ``` If the operating system is Windows, the path @@ -30,21 +40,20 @@ If you don't want to use the class-path option, you can make environment: ``` -export CLASSPATH=.:javassist.jar +export CLASSPATH=./target:../javassist.jar ``` or if the operating system is Windows: ``` -set CLASSPATH=.;javassist.jar +set CLASSPATH=./target;../javassist.jar ``` -Otherwise, you can copy `javassist.jar` to the directory -<_java-home_>`/jre/lib/ext`. - +Then, compile `src/main/javassist/tools/**/*.java`: -<_java-home_> depends on the system. It is usually -`/usr/local/java` or `c:\j2sdk1.4\`, etc. +``` +javac -d target -cp ./target:../javassist.jar src/main/javassist/tools/**/*.java +``` ### 2. `sample/Test.java` @@ -53,7 +62,7 @@ This is a very simple program using Javassist. To run, type the commands: ``` -% javac sample/Test.java +% javac -d target sample/Test.java % java sample.Test ``` @@ -69,7 +78,7 @@ is called on the Person object. To run, type the commands: ``` -% javac sample/reflect/*.java +% javac -d target sample/reflect/*.java % java javassist.tools.reflect.Loader sample.reflect.Main Joe ``` @@ -101,7 +110,7 @@ This is another example of reflective programming. To run, type the commands: ``` -% javac sample/duplicate/*.java +% javac -d target sample/duplicate/*.java % java sample.duplicate.Main ``` @@ -122,9 +131,9 @@ a vector of a given type at compile time. To run, type the commands: ``` -% javac sample/vector/*.java +% javac -d target sample/preproc/*.java sample/vector/*.java % java sample.preproc.Compiler sample/vector/Test.j -% javac sample/vector/Test.java +% javac -d target sample/vector/Test.java % java sample.vector.Test ``` @@ -139,7 +148,7 @@ This demonstrates the `javassist.rmi` package. To run, type the commands: ``` -% javac sample/rmi/*.java +% javac -d target sample/rmi/*.java % java sample.rmi.Counter 5001 ``` @@ -165,7 +174,7 @@ existing class file under some restriction. To run, type the commands: ``` -% javac sample/evolve/*.java +% javac -d target sample/evolve/*.java % java sample.evolve.DemoLoader 5003 ``` diff --git a/build.xml b/build.xml index 78d0e55f..881800c7 100644 --- a/build.xml +++ b/build.xml @@ -6,7 +6,7 @@ - + @@ -20,6 +20,7 @@ + @@ -144,7 +145,25 @@ - + + + + + + + + - - - + - - + + + + + + + + + + + @@ -234,7 +264,7 @@ Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.]]> - + @@ -301,7 +331,7 @@ Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.]]> - ** Please open sample/rmi/webdemo.html with your browser ** + ** Please open examples/sample/rmi/webdemo.html with your browser ** diff --git a/sample/Test.java b/examples/sample/Test.java similarity index 100% rename from sample/Test.java rename to examples/sample/Test.java diff --git a/sample/duplicate/Ball.java b/examples/sample/duplicate/Ball.java similarity index 100% rename from sample/duplicate/Ball.java rename to examples/sample/duplicate/Ball.java diff --git a/sample/duplicate/DuplicatedObject.java b/examples/sample/duplicate/DuplicatedObject.java similarity index 100% rename from sample/duplicate/DuplicatedObject.java rename to examples/sample/duplicate/DuplicatedObject.java diff --git a/sample/duplicate/Main.java b/examples/sample/duplicate/Main.java similarity index 100% rename from sample/duplicate/Main.java rename to examples/sample/duplicate/Main.java diff --git a/sample/duplicate/Viewer.java b/examples/sample/duplicate/Viewer.java similarity index 100% rename from sample/duplicate/Viewer.java rename to examples/sample/duplicate/Viewer.java diff --git a/sample/evolve/CannotCreateException.java b/examples/sample/evolve/CannotCreateException.java similarity index 100% rename from sample/evolve/CannotCreateException.java rename to examples/sample/evolve/CannotCreateException.java diff --git a/sample/evolve/CannotUpdateException.java b/examples/sample/evolve/CannotUpdateException.java similarity index 100% rename from sample/evolve/CannotUpdateException.java rename to examples/sample/evolve/CannotUpdateException.java diff --git a/sample/evolve/DemoLoader.java b/examples/sample/evolve/DemoLoader.java similarity index 100% rename from sample/evolve/DemoLoader.java rename to examples/sample/evolve/DemoLoader.java diff --git a/sample/evolve/DemoServer.java b/examples/sample/evolve/DemoServer.java similarity index 100% rename from sample/evolve/DemoServer.java rename to examples/sample/evolve/DemoServer.java diff --git a/sample/evolve/Evolution.java b/examples/sample/evolve/Evolution.java similarity index 100% rename from sample/evolve/Evolution.java rename to examples/sample/evolve/Evolution.java diff --git a/sample/evolve/Sample.java b/examples/sample/evolve/Sample.java similarity index 100% rename from sample/evolve/Sample.java rename to examples/sample/evolve/Sample.java diff --git a/sample/evolve/VersionManager.java b/examples/sample/evolve/VersionManager.java similarity index 100% rename from sample/evolve/VersionManager.java rename to examples/sample/evolve/VersionManager.java diff --git a/sample/evolve/WebPage.java b/examples/sample/evolve/WebPage.java similarity index 100% rename from sample/evolve/WebPage.java rename to examples/sample/evolve/WebPage.java diff --git a/sample/evolve/demo.html b/examples/sample/evolve/demo.html similarity index 100% rename from sample/evolve/demo.html rename to examples/sample/evolve/demo.html diff --git a/sample/evolve/sample/evolve/WebPage.java b/examples/sample/evolve/sample/evolve/WebPage.java similarity index 100% rename from sample/evolve/sample/evolve/WebPage.java rename to examples/sample/evolve/sample/evolve/WebPage.java diff --git a/sample/evolve/start.html b/examples/sample/evolve/start.html similarity index 100% rename from sample/evolve/start.html rename to examples/sample/evolve/start.html diff --git a/sample/evolve/update.html b/examples/sample/evolve/update.html similarity index 100% rename from sample/evolve/update.html rename to examples/sample/evolve/update.html diff --git a/sample/hotswap/HelloWorld.java b/examples/sample/hotswap/HelloWorld.java similarity index 100% rename from sample/hotswap/HelloWorld.java rename to examples/sample/hotswap/HelloWorld.java diff --git a/sample/hotswap/Test.java b/examples/sample/hotswap/Test.java similarity index 100% rename from sample/hotswap/Test.java rename to examples/sample/hotswap/Test.java diff --git a/sample/hotswap/logging/HelloWorld.java b/examples/sample/hotswap/logging/HelloWorld.java similarity index 100% rename from sample/hotswap/logging/HelloWorld.java rename to examples/sample/hotswap/logging/HelloWorld.java diff --git a/sample/preproc/Assistant.java b/examples/sample/preproc/Assistant.java similarity index 100% rename from sample/preproc/Assistant.java rename to examples/sample/preproc/Assistant.java diff --git a/sample/preproc/Compiler.java b/examples/sample/preproc/Compiler.java similarity index 100% rename from sample/preproc/Compiler.java rename to examples/sample/preproc/Compiler.java diff --git a/sample/preproc/package.html b/examples/sample/preproc/package.html similarity index 100% rename from sample/preproc/package.html rename to examples/sample/preproc/package.html diff --git a/sample/reflect/Main.java b/examples/sample/reflect/Main.java similarity index 100% rename from sample/reflect/Main.java rename to examples/sample/reflect/Main.java diff --git a/sample/reflect/Person.java b/examples/sample/reflect/Person.java similarity index 100% rename from sample/reflect/Person.java rename to examples/sample/reflect/Person.java diff --git a/sample/reflect/VerboseMetaobj.java b/examples/sample/reflect/VerboseMetaobj.java similarity index 100% rename from sample/reflect/VerboseMetaobj.java rename to examples/sample/reflect/VerboseMetaobj.java diff --git a/sample/rmi/AlertDialog.java b/examples/sample/rmi/AlertDialog.java similarity index 100% rename from sample/rmi/AlertDialog.java rename to examples/sample/rmi/AlertDialog.java diff --git a/sample/rmi/CountApplet.java b/examples/sample/rmi/CountApplet.java similarity index 100% rename from sample/rmi/CountApplet.java rename to examples/sample/rmi/CountApplet.java diff --git a/sample/rmi/Counter.java b/examples/sample/rmi/Counter.java similarity index 100% rename from sample/rmi/Counter.java rename to examples/sample/rmi/Counter.java diff --git a/sample/rmi/inside.gif b/examples/sample/rmi/inside.gif similarity index 100% rename from sample/rmi/inside.gif rename to examples/sample/rmi/inside.gif diff --git a/sample/rmi/start.html b/examples/sample/rmi/start.html similarity index 100% rename from sample/rmi/start.html rename to examples/sample/rmi/start.html diff --git a/sample/rmi/webdemo.html b/examples/sample/rmi/webdemo.html similarity index 100% rename from sample/rmi/webdemo.html rename to examples/sample/rmi/webdemo.html diff --git a/sample/vector/Sample.java b/examples/sample/vector/Sample.java similarity index 100% rename from sample/vector/Sample.java rename to examples/sample/vector/Sample.java diff --git a/sample/vector/Sample2.java b/examples/sample/vector/Sample2.java similarity index 100% rename from sample/vector/Sample2.java rename to examples/sample/vector/Sample2.java diff --git a/sample/vector/Test.j b/examples/sample/vector/Test.j similarity index 100% rename from sample/vector/Test.j rename to examples/sample/vector/Test.j diff --git a/sample/vector/VectorAssistant.java b/examples/sample/vector/VectorAssistant.java similarity index 100% rename from sample/vector/VectorAssistant.java rename to examples/sample/vector/VectorAssistant.java diff --git a/src/main/javassist/tools/reflect/CannotCreateException.java b/examples/src/main/javassist/tools/reflect/CannotCreateException.java similarity index 100% rename from src/main/javassist/tools/reflect/CannotCreateException.java rename to examples/src/main/javassist/tools/reflect/CannotCreateException.java diff --git a/src/main/javassist/tools/reflect/CannotInvokeException.java b/examples/src/main/javassist/tools/reflect/CannotInvokeException.java similarity index 100% rename from src/main/javassist/tools/reflect/CannotInvokeException.java rename to examples/src/main/javassist/tools/reflect/CannotInvokeException.java diff --git a/src/main/javassist/tools/reflect/CannotReflectException.java b/examples/src/main/javassist/tools/reflect/CannotReflectException.java similarity index 100% rename from src/main/javassist/tools/reflect/CannotReflectException.java rename to examples/src/main/javassist/tools/reflect/CannotReflectException.java diff --git a/src/main/javassist/tools/reflect/ClassMetaobject.java b/examples/src/main/javassist/tools/reflect/ClassMetaobject.java similarity index 100% rename from src/main/javassist/tools/reflect/ClassMetaobject.java rename to examples/src/main/javassist/tools/reflect/ClassMetaobject.java diff --git a/src/main/javassist/tools/reflect/Compiler.java b/examples/src/main/javassist/tools/reflect/Compiler.java similarity index 100% rename from src/main/javassist/tools/reflect/Compiler.java rename to examples/src/main/javassist/tools/reflect/Compiler.java diff --git a/src/main/javassist/tools/reflect/Loader.java b/examples/src/main/javassist/tools/reflect/Loader.java similarity index 100% rename from src/main/javassist/tools/reflect/Loader.java rename to examples/src/main/javassist/tools/reflect/Loader.java diff --git a/src/main/javassist/tools/reflect/Metalevel.java b/examples/src/main/javassist/tools/reflect/Metalevel.java similarity index 100% rename from src/main/javassist/tools/reflect/Metalevel.java rename to examples/src/main/javassist/tools/reflect/Metalevel.java diff --git a/src/main/javassist/tools/reflect/Metaobject.java b/examples/src/main/javassist/tools/reflect/Metaobject.java similarity index 100% rename from src/main/javassist/tools/reflect/Metaobject.java rename to examples/src/main/javassist/tools/reflect/Metaobject.java diff --git a/src/main/javassist/tools/reflect/Reflection.java b/examples/src/main/javassist/tools/reflect/Reflection.java similarity index 100% rename from src/main/javassist/tools/reflect/Reflection.java rename to examples/src/main/javassist/tools/reflect/Reflection.java diff --git a/src/main/javassist/tools/reflect/Sample.java b/examples/src/main/javassist/tools/reflect/Sample.java similarity index 100% rename from src/main/javassist/tools/reflect/Sample.java rename to examples/src/main/javassist/tools/reflect/Sample.java diff --git a/src/main/javassist/tools/reflect/package.html b/examples/src/main/javassist/tools/reflect/package.html similarity index 100% rename from src/main/javassist/tools/reflect/package.html rename to examples/src/main/javassist/tools/reflect/package.html diff --git a/src/main/javassist/tools/rmi/AppletServer.java b/examples/src/main/javassist/tools/rmi/AppletServer.java similarity index 100% rename from src/main/javassist/tools/rmi/AppletServer.java rename to examples/src/main/javassist/tools/rmi/AppletServer.java diff --git a/src/main/javassist/tools/rmi/ObjectImporter.java b/examples/src/main/javassist/tools/rmi/ObjectImporter.java similarity index 100% rename from src/main/javassist/tools/rmi/ObjectImporter.java rename to examples/src/main/javassist/tools/rmi/ObjectImporter.java diff --git a/src/main/javassist/tools/rmi/ObjectNotFoundException.java b/examples/src/main/javassist/tools/rmi/ObjectNotFoundException.java similarity index 100% rename from src/main/javassist/tools/rmi/ObjectNotFoundException.java rename to examples/src/main/javassist/tools/rmi/ObjectNotFoundException.java diff --git a/src/main/javassist/tools/rmi/Proxy.java b/examples/src/main/javassist/tools/rmi/Proxy.java similarity index 100% rename from src/main/javassist/tools/rmi/Proxy.java rename to examples/src/main/javassist/tools/rmi/Proxy.java diff --git a/src/main/javassist/tools/rmi/RemoteException.java b/examples/src/main/javassist/tools/rmi/RemoteException.java similarity index 100% rename from src/main/javassist/tools/rmi/RemoteException.java rename to examples/src/main/javassist/tools/rmi/RemoteException.java diff --git a/src/main/javassist/tools/rmi/RemoteRef.java b/examples/src/main/javassist/tools/rmi/RemoteRef.java similarity index 100% rename from src/main/javassist/tools/rmi/RemoteRef.java rename to examples/src/main/javassist/tools/rmi/RemoteRef.java diff --git a/src/main/javassist/tools/rmi/Sample.java b/examples/src/main/javassist/tools/rmi/Sample.java similarity index 100% rename from src/main/javassist/tools/rmi/Sample.java rename to examples/src/main/javassist/tools/rmi/Sample.java diff --git a/src/main/javassist/tools/rmi/StubGenerator.java b/examples/src/main/javassist/tools/rmi/StubGenerator.java similarity index 100% rename from src/main/javassist/tools/rmi/StubGenerator.java rename to examples/src/main/javassist/tools/rmi/StubGenerator.java diff --git a/src/main/javassist/tools/rmi/package.html b/examples/src/main/javassist/tools/rmi/package.html similarity index 100% rename from src/main/javassist/tools/rmi/package.html rename to examples/src/main/javassist/tools/rmi/package.html diff --git a/src/main/javassist/tools/web/BadHttpRequest.java b/examples/src/main/javassist/tools/web/BadHttpRequest.java similarity index 100% rename from src/main/javassist/tools/web/BadHttpRequest.java rename to examples/src/main/javassist/tools/web/BadHttpRequest.java diff --git a/src/main/javassist/tools/web/Viewer.java b/examples/src/main/javassist/tools/web/Viewer.java similarity index 100% rename from src/main/javassist/tools/web/Viewer.java rename to examples/src/main/javassist/tools/web/Viewer.java diff --git a/src/main/javassist/tools/web/Webserver.java b/examples/src/main/javassist/tools/web/Webserver.java similarity index 100% rename from src/main/javassist/tools/web/Webserver.java rename to examples/src/main/javassist/tools/web/Webserver.java diff --git a/src/main/javassist/tools/web/package.html b/examples/src/main/javassist/tools/web/package.html similarity index 100% rename from src/main/javassist/tools/web/package.html rename to examples/src/main/javassist/tools/web/package.html diff --git a/src/test/javassist/tools/reflect/ClassMetaobjectTest.java b/examples/src/test/javassist/tools/reflect/ClassMetaobjectTest.java similarity index 100% rename from src/test/javassist/tools/reflect/ClassMetaobjectTest.java rename to examples/src/test/javassist/tools/reflect/ClassMetaobjectTest.java diff --git a/src/test/javassist/tools/reflect/LoaderTest.java b/examples/src/test/javassist/tools/reflect/LoaderTest.java similarity index 100% rename from src/test/javassist/tools/reflect/LoaderTest.java rename to examples/src/test/javassist/tools/reflect/LoaderTest.java diff --git a/src/test/javassist/tools/reflect/Person.java b/examples/src/test/javassist/tools/reflect/Person.java similarity index 100% rename from src/test/javassist/tools/reflect/Person.java rename to examples/src/test/javassist/tools/reflect/Person.java diff --git a/src/test/javassist/tools/reflect/SubClass.java b/examples/src/test/javassist/tools/reflect/SubClass.java similarity index 100% rename from src/test/javassist/tools/reflect/SubClass.java rename to examples/src/test/javassist/tools/reflect/SubClass.java diff --git a/src/test/javassist/tools/reflect/SuperClass.java b/examples/src/test/javassist/tools/reflect/SuperClass.java similarity index 100% rename from src/test/javassist/tools/reflect/SuperClass.java rename to examples/src/test/javassist/tools/reflect/SuperClass.java diff --git a/javassist.jar b/javassist.jar index a630a582..81ebf22e 100644 Binary files a/javassist.jar and b/javassist.jar differ diff --git a/pom.xml b/pom.xml index b71e427b..e888206c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.javassist javassist - 3.31.0-GA + 3.32.0-GA bundle Javassist diff --git a/src/main/javassist/CtClass.java b/src/main/javassist/CtClass.java index 2954bc45..3133d1cc 100644 --- a/src/main/javassist/CtClass.java +++ b/src/main/javassist/CtClass.java @@ -69,7 +69,7 @@ public abstract class CtClass { /** * The version number of this release. */ - public static final String version = "3.31.0-GA"; + public static final String version = "3.32.0-GA"; private int linesCount = 0; diff --git a/src/main/javassist/bytecode/AttributeInfo.java b/src/main/javassist/bytecode/AttributeInfo.java index 9f312f60..7c264816 100644 --- a/src/main/javassist/bytecode/AttributeInfo.java +++ b/src/main/javassist/bytecode/AttributeInfo.java @@ -67,7 +67,11 @@ protected AttributeInfo(ConstPool cp, int n, DataInputStream in) constPool = cp; name = n; int len = in.readInt(); - info = new byte[len]; + try { + info = new byte[len]; + } catch (Throwable e) { + throw new IOException("Error reading attribute info for " + n + " with size " + len, e); + } if (len > 0) in.readFully(info); } diff --git a/src/main/javassist/runtime/Desc.java b/src/main/javassist/runtime/Desc.java index 8299b5cd..541c4651 100644 --- a/src/main/javassist/runtime/Desc.java +++ b/src/main/javassist/runtime/Desc.java @@ -31,8 +31,10 @@ public class Desc { *
Thread.currentThread().getContextClassLoader().loadClass()
*

If false, it is loaded by Class.forName(). * The default value is false. + * + * @deprecated since 3.32. Use {@link setUseContextClassLoaderLocally()} instead. */ - public static boolean useContextClassLoader = false; + private static boolean useContextClassLoader = false; private static final ThreadLocal USE_CONTEXT_CLASS_LOADER_LOCALLY = new ThreadLocal() { @Override diff --git a/src/test/javassist/JvstTest.java b/src/test/javassist/JvstTest.java index b42a22a9..af11a726 100644 --- a/src/test/javassist/JvstTest.java +++ b/src/test/javassist/JvstTest.java @@ -1160,7 +1160,6 @@ public static Test suite() { suite.addTestSuite(javassist.compiler.CompTest.class); suite.addTestSuite(javassist.SetterTest.class); suite.addTestSuite(javassist.bytecode.InsertGap0.class); - suite.addTestSuite(javassist.tools.reflect.LoaderTest.class); suite.addTestSuite(javassist.tools.CallbackTest.class); suite.addTestSuite(testproxy.ProxyTester.class); suite.addTestSuite(testproxy.ProxyFactoryPerformanceTest.class); // remove? diff --git a/src/test/javassist/JvstTest4.java b/src/test/javassist/JvstTest4.java index 20ceacbc..1955f0da 100644 --- a/src/test/javassist/JvstTest4.java +++ b/src/test/javassist/JvstTest4.java @@ -751,10 +751,9 @@ public void testJIRA151() { // try it using classloader of TestDescForName Desc.useContextClassLoader = false; assertTrue(javassist.runtime.Desc.getClazz("[Ljava.lang.String;") != null); //Thread.currentThread().setContextClassLoader(TestDescForName.class.getClassLoader()); - boolean old = javassist.runtime.Desc.useContextClassLoader; - javassist.runtime.Desc.useContextClassLoader = true; + javassist.runtime.Desc.setUseContextClassLoaderLocally(); assertTrue(javassist.runtime.Desc.getClazz("[Ljava.lang.String;") != null); - javassist.runtime.Desc.useContextClassLoader = old; + javassist.runtime.Desc.resetUseContextClassLoaderLocally(); } public void testJIRA166() throws Exception {