Skip to content

Commit 3910516

Browse files
committed
[GR-69513] [GR-69514] [GR-69620] Fix proxy serialization errors at build time.
PullRequest: graal/22081
2 parents a58ab33 + 8bffd99 commit 3910516

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import com.oracle.svm.core.util.ImageHeapMap;
5252
import com.oracle.svm.core.util.VMError;
5353
import com.oracle.svm.util.ClassUtil;
54-
import com.oracle.svm.util.LogUtils;
5554
import com.oracle.svm.util.ReflectionUtil;
5655

5756
import jdk.graal.compiler.debug.GraalError;
@@ -156,7 +155,6 @@ private static Object createProxyClass(Class<?>[] interfaces) {
156155
}
157156
return clazz;
158157
} catch (Throwable t) {
159-
LogUtils.warning("Could not create a proxy class from list of interfaces: %s. Reason: %s", Arrays.toString(interfaces), t.getMessage());
160158
return t;
161159
}
162160
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/proxy/ProxyRegistry.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
import java.util.function.BiConsumer;
2929

3030
import org.graalvm.nativeimage.impl.ConfigurationCondition;
31+
import org.graalvm.nativeimage.impl.RuntimeProxyRegistrySupport;
3132

3233
import com.oracle.svm.core.jdk.proxy.DynamicProxyRegistry;
3334
import com.oracle.svm.hosted.ConditionalConfigurationRegistry;
3435
import com.oracle.svm.hosted.ImageClassLoader;
3536
import com.oracle.svm.util.LogUtils;
36-
import org.graalvm.nativeimage.impl.RuntimeProxyRegistrySupport;
3737

3838
public class ProxyRegistry extends ConditionalConfigurationRegistry implements RuntimeProxyRegistrySupport, BiConsumer<ConfigurationCondition, List<String>> {
3939
private final DynamicProxyRegistry dynamicProxySupport;
@@ -57,7 +57,12 @@ public Class<?> registerProxy(ConfigurationCondition condition, Class<?>... inte
5757
abortIfSealed();
5858
requireNonNull(interfaces, "interface", "proxy class creation");
5959
registerConditionalConfiguration(condition, (cnd) -> dynamicProxySupport.addProxyClass(cnd, interfaces));
60-
return dynamicProxySupport.getProxyClassHosted(interfaces);
60+
try {
61+
return dynamicProxySupport.getProxyClassHosted(interfaces);
62+
} catch (Throwable t) {
63+
/* we return null for illegal proxy classes */
64+
return null;
65+
}
6166
}
6267

6368
public Class<?> createProxyClassForSerialization(List<String> proxies) {

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/serialize/SerializationFeature.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,12 @@ public void registerLambdaCapturingClass(ConfigurationCondition condition, Strin
385385
public void registerProxyClass(ConfigurationCondition condition, List<String> implementedInterfaces) {
386386
abortIfSealed();
387387
registerConditionalConfiguration(condition, (cnd) -> {
388-
Class<?> proxyClass = proxyRegistry.createProxyClassForSerialization(implementedInterfaces);
389-
register(cnd, proxyClass);
388+
try {
389+
Class<?> proxyClass = proxyRegistry.createProxyClassForSerialization(implementedInterfaces);
390+
register(cnd, proxyClass);
391+
} catch (IllegalArgumentException t) {
392+
/* ignore: can't serialize class that can't be instantiated */
393+
}
390394
});
391395
}
392396

0 commit comments

Comments
 (0)