531535 org.eclipse.gemini.blueprint.service.importer.support.internal.aop.StaticServiceReferenceProxy cannot be cast to org.eclipse.osgi.internal.serviceregistry.ServiceReferenceImpl
Signed-off-by: ootto <olaf@x100.de>
diff --git a/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceLifecycleListenerAdapter.java b/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceLifecycleListenerAdapter.java
index afa1911..8b9e6c4 100644
--- a/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceLifecycleListenerAdapter.java
+++ b/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceLifecycleListenerAdapter.java
@@ -14,20 +14,12 @@
package org.eclipse.gemini.blueprint.config.internal.adapter;
-import java.lang.reflect.Method;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.List;
-import java.util.Map;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.gemini.blueprint.context.support.internal.security.SecurityUtils;
import org.eclipse.gemini.blueprint.service.importer.ImportedOsgiServiceProxy;
import org.eclipse.gemini.blueprint.service.importer.OsgiServiceLifecycleListener;
+import org.eclipse.gemini.blueprint.service.importer.ServiceReferenceProxy;
import org.eclipse.gemini.blueprint.util.internal.ReflectionUtils;
import org.osgi.framework.ServiceReference;
import org.springframework.beans.BeansException;
@@ -38,6 +30,15 @@
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
+import java.lang.reflect.Method;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.List;
+import java.util.Map;
+
/**
* OsgiServiceLifecycleListener wrapper for custom beans, useful when custom methods are being used.
*
@@ -205,6 +206,11 @@
ServiceReference ref =
(service != null ? ((ImportedOsgiServiceProxy) service).getServiceReference() : null);
+ // Never expose the internal proxies; they cannot be used to safely obtain service instances.
+ if (ref != null) {
+ ref = ((ServiceReferenceProxy) ref).getTargetServiceReference();
+ }
+
try {
ReflectionUtils.invokeMethod(method, target, new Object[] { ref });
}
diff --git a/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceRegistrationListenerAdapter.java b/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceRegistrationListenerAdapter.java
index 2aecba4..d45eaa4 100644
--- a/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceRegistrationListenerAdapter.java
+++ b/core/src/main/java/org/eclipse/gemini/blueprint/config/internal/adapter/OsgiServiceRegistrationListenerAdapter.java
@@ -14,15 +14,6 @@
package org.eclipse.gemini.blueprint.config.internal.adapter;
-import java.lang.reflect.Method;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.List;
-import java.util.Map;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.gemini.blueprint.context.support.internal.security.SecurityUtils;
@@ -33,6 +24,15 @@
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
+import java.lang.reflect.Method;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.List;
+import java.util.Map;
+
/**
* Adapter/wrapper class that handles listener with custom method invocation. Similar in functionality to
* {@link org.eclipse.gemini.blueprint.config.internal.adapter.OsgiServiceLifecycleListenerAdapter}.
@@ -140,12 +140,10 @@
try {
if (isSecurityEnabled) {
- AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
- public Object run() throws Exception {
- ((OsgiServiceRegistrationListener) target).registered(service, serviceProperties);
- return null;
- }
- }, acc);
+ AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
+ ((OsgiServiceRegistrationListener) target).registered(service, serviceProperties);
+ return null;
+ }, acc);
} else {
((OsgiServiceRegistrationListener) target).registered(service, serviceProperties);
}
@@ -158,13 +156,11 @@
}
if (isSecurityEnabled) {
- AccessController.doPrivileged(new PrivilegedAction<Object>() {
- public Object run() {
- CustomListenerAdapterUtils.invokeCustomMethods(target, registrationMethods, service,
- serviceProperties);
- return null;
- }
- }, acc);
+ AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
+ CustomListenerAdapterUtils.invokeCustomMethods(target, registrationMethods, service,
+ serviceProperties);
+ return null;
+ }, acc);
} else {
CustomListenerAdapterUtils.invokeCustomMethods(target, registrationMethods, service, serviceProperties);
}
@@ -194,12 +190,10 @@
try {
if (isSecurityEnabled) {
- AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
- public Object run() throws Exception {
- ((OsgiServiceRegistrationListener) target).unregistered(service, serviceProperties);
- return null;
- }
- }, acc);
+ AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
+ ((OsgiServiceRegistrationListener) target).unregistered(service, serviceProperties);
+ return null;
+ }, acc);
} else {
((OsgiServiceRegistrationListener) target).unregistered(service, serviceProperties);
}
@@ -209,13 +203,11 @@
}
if (isSecurityEnabled) {
- AccessController.doPrivileged(new PrivilegedAction<Object>() {
- public Object run() {
- CustomListenerAdapterUtils.invokeCustomMethods(target, unregistrationMethods, service,
- serviceProperties);
- return null;
- }
- }, acc);
+ AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
+ CustomListenerAdapterUtils.invokeCustomMethods(target, unregistrationMethods, service,
+ serviceProperties);
+ return null;
+ }, acc);
} else {
CustomListenerAdapterUtils.invokeCustomMethods(target, unregistrationMethods, service, serviceProperties);
}