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 <[email protected]>
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);