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);

 		}