diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java index 119999247d61..3214fa31836d 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java @@ -51,7 +51,6 @@ import com.oracle.svm.core.util.ImageHeapMap; import com.oracle.svm.core.util.VMError; import com.oracle.svm.util.ClassUtil; -import com.oracle.svm.util.LogUtils; import com.oracle.svm.util.ReflectionUtil; import jdk.graal.compiler.debug.GraalError; @@ -156,7 +155,6 @@ private static Object createProxyClass(Class[] interfaces) { } return clazz; } catch (Throwable t) { - LogUtils.warning("Could not create a proxy class from list of interfaces: %s. Reason: %s", Arrays.toString(interfaces), t.getMessage()); return t; } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java index 741c9fa93941..1e283242b2a9 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java @@ -28,12 +28,12 @@ import java.util.function.BiConsumer; import org.graalvm.nativeimage.impl.ConfigurationCondition; +import org.graalvm.nativeimage.impl.RuntimeProxyRegistrySupport; import com.oracle.svm.core.jdk.proxy.DynamicProxyRegistry; import com.oracle.svm.hosted.ConditionalConfigurationRegistry; import com.oracle.svm.hosted.ImageClassLoader; import com.oracle.svm.util.LogUtils; -import org.graalvm.nativeimage.impl.RuntimeProxyRegistrySupport; public class ProxyRegistry extends ConditionalConfigurationRegistry implements RuntimeProxyRegistrySupport, BiConsumer> { private final DynamicProxyRegistry dynamicProxySupport; @@ -57,7 +57,12 @@ public Class registerProxy(ConfigurationCondition condition, Class... inte abortIfSealed(); requireNonNull(interfaces, "interface", "proxy class creation"); registerConditionalConfiguration(condition, (cnd) -> dynamicProxySupport.addProxyClass(cnd, interfaces)); - return dynamicProxySupport.getProxyClassHosted(interfaces); + try { + return dynamicProxySupport.getProxyClassHosted(interfaces); + } catch (Throwable t) { + /* we return null for illegal proxy classes */ + return null; + } } public Class createProxyClassForSerialization(List proxies) { diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java index 6a9615c6cbc4..327607ce749a 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java @@ -385,8 +385,12 @@ public void registerLambdaCapturingClass(ConfigurationCondition condition, Strin public void registerProxyClass(ConfigurationCondition condition, List implementedInterfaces) { abortIfSealed(); registerConditionalConfiguration(condition, (cnd) -> { - Class proxyClass = proxyRegistry.createProxyClassForSerialization(implementedInterfaces); - register(cnd, proxyClass); + try { + Class proxyClass = proxyRegistry.createProxyClassForSerialization(implementedInterfaces); + register(cnd, proxyClass); + } catch (IllegalArgumentException t) { + /* ignore: can't serialize class that can't be instantiated */ + } }); }