This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
The following commit(s) were added to refs/heads/master by this push: new 8cf2e1a OWB-1315 ensure to not use Unsafe when DefiningClassService is defined 8cf2e1a is described below commit 8cf2e1a3e3737485905b59e7790464722a4d747b Author: Romain Manni-Bucau <rmannibu...@apache.org> AuthorDate: Tue Mar 10 13:09:52 2020 +0100 OWB-1315 ensure to not use Unsafe when DefiningClassService is defined --- .../apache/webbeans/proxy/AbstractProxyFactory.java | 21 ++++++++++++++++++++- .../proxy/InterceptorDecoratorProxyFactory.java | 8 ++------ .../webbeans/proxy/NormalScopeProxyFactory.java | 2 +- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java index 1885c0b..49216c3 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java @@ -75,8 +75,8 @@ public abstract class AbstractProxyFactory { this.webBeansContext = webBeansContext; javaVersion = determineDefaultJavaVersion(); - unsafe = new Unsafe(); definingService = webBeansContext.getService(DefiningClassService.class); + unsafe = definingService == null ? new Unsafe() : null; } private int determineDefaultJavaVersion() @@ -280,6 +280,25 @@ public abstract class AbstractProxyFactory return unsafe.defineAndLoadClass(classLoader, proxyClassName, proxyBytes); } + protected <T> T newInstance(final Class<? extends T> proxyClass) + { + if (unsafe != null) + { + return unsafe.unsafeNewInstance(proxyClass); + } + else + { + try + { + return proxyClass.getConstructor().newInstance(); + } + catch (final Exception e) + { + throw new IllegalStateException("Failed to allocateInstance of Proxy class " + proxyClass.getName(), e); + } + } + } + private Method[] sortOutDuplicateMethods(Method[] methods) { if (methods == null || methods.length == 0) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java index 061dba8..5f347c9 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java @@ -87,7 +87,7 @@ public class InterceptorDecoratorProxyFactory extends AbstractProxyFactory try { - T proxy = unsafe.unsafeNewInstance(proxyClass); + T proxy = newInstance(proxyClass); Field delegateField = proxy.getClass().getDeclaredField(FIELD_PROXIED_INSTANCE); delegateField.setAccessible(true); @@ -99,11 +99,7 @@ public class InterceptorDecoratorProxyFactory extends AbstractProxyFactory return proxy; } - catch (IllegalAccessException e) - { - throw new ProxyGenerationException(e); - } - catch (NoSuchFieldException e) + catch (IllegalAccessException | NoSuchFieldException e) { throw new ProxyGenerationException(e); } diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java index c652284..0d7d456 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java @@ -291,7 +291,7 @@ public class NormalScopeProxyFactory extends AbstractProxyFactory { try { - T proxy = unsafe.unsafeNewInstance(proxyClass); + T proxy = newInstance(proxyClass); Field delegateField = proxy.getClass().getDeclaredField(FIELD_INSTANCE_PROVIDER); delegateField.setAccessible(true);