You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2018/02/21 09:05:27 UTC
svn commit: r1824947 - in
/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi:
ObjectFactoryHelper.java Utils.java
Author: gnodet
Date: Wed Feb 21 09:05:26 2018
New Revision: 1824947
URL: http://svn.apache.org/viewvc?rev=1824947&view=rev
Log:
[jndi] add a Utils.doPriviledged throwing an exception, factor code
Modified:
aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/ObjectFactoryHelper.java
aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/Utils.java
Modified: aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/ObjectFactoryHelper.java
URL: http://svn.apache.org/viewvc/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/ObjectFactoryHelper.java?rev=1824947&r1=1824946&r2=1824947&view=diff
==============================================================================
--- aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/ObjectFactoryHelper.java (original)
+++ aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/ObjectFactoryHelper.java Wed Feb 21 09:05:26 2018
@@ -59,7 +59,14 @@ public class ObjectFactoryHelper impleme
Context nameCtx,
Hashtable<?, ?> environment,
Attributes attrs) throws Exception {
+ return Utils.doPrivilegedE(() -> doGetObjectInstance(obj, name, nameCtx, environment, attrs));
+ }
+ private Object doGetObjectInstance(Object obj,
+ Name name,
+ Context nameCtx,
+ Hashtable<?, ?> environment,
+ Attributes attrs) throws Exception {
// Step 1
if (obj instanceof Referenceable) {
obj = ((Referenceable) obj).getReference();
@@ -113,12 +120,7 @@ public class ObjectFactoryHelper impleme
if (canCallObjectFactory(obj, ref)) {
ObjectFactory factory = Activator.getService(callerContext, ref);
if (factory != null) {
- Object result;
- if (factory instanceof DirObjectFactory) {
- result = ((DirObjectFactory) factory).getObjectInstance(obj, name, nameCtx, environment, attrs);
- } else {
- result = factory.getObjectInstance(obj, name, nameCtx, environment);
- }
+ Object result = getObjectFromFactory(obj, name, nameCtx, environment, attrs, factory);
// if the result comes back and is not null and not the reference
// object then we should return the result, so break out of the
// loop we are in.
@@ -150,11 +152,7 @@ public class ObjectFactoryHelper impleme
ObjectFactory factory = ObjectFactoryHelper.findObjectFactoryByClassName(defaultContext, className);
if (factory != null) {
- if (factory instanceof DirObjectFactory) {
- result = ((DirObjectFactory) factory).getObjectInstance(reference, name, nameCtx, environment, attrs);
- } else {
- result = factory.getObjectInstance(reference, name, nameCtx, environment);
- }
+ result = getObjectFromFactory(reference, name, nameCtx, environment, attrs, factory);
}
return (result == null) ? obj : result;
@@ -181,11 +179,7 @@ public class ObjectFactoryHelper impleme
Object result = null;
if (factory != null) {
- if (factory instanceof DirObjectFactory) {
- result = ((DirObjectFactory) factory).getObjectInstance(obj, name, nameCtx, environment, attrs);
- } else {
- result = factory.getObjectInstance(obj, name, nameCtx, environment);
- }
+ result = getObjectFromFactory(obj, name, nameCtx, environment, attrs, factory);
}
return (result == null) ? obj : result;
@@ -216,11 +210,7 @@ public class ObjectFactoryHelper impleme
}
if (logger.isLoggable(Level.FINE)) logger.log(Level.FINE, "cand=" + cand + " factory=" + factory);
if (factory != null) {
- if (factory instanceof DirObjectFactory) {
- result = ((DirObjectFactory) factory).getObjectInstance(obj, name, nameCtx, environment, attrs);
- } else {
- result = factory.getObjectInstance(obj, name, nameCtx, environment);
- }
+ result = getObjectFromFactory(obj, name, nameCtx, environment, attrs, factory);
}
if (result != null && result != obj) break;
}
@@ -246,14 +236,8 @@ public class ObjectFactoryHelper impleme
if (factoryService != null) {
ObjectFactory factory = factoryService.get();
- Object result;
-
String value = (String) address.getContent();
- if (factory instanceof DirObjectFactory) {
- result = ((DirObjectFactory) factory).getObjectInstance(value, name, nameCtx, environment, attrs);
- } else {
- result = factory.getObjectInstance(value, name, nameCtx, environment);
- }
+ Object result = getObjectFromFactory(value, name, nameCtx, environment, attrs, factory);
// if the result comes back and is not null and not the reference
// object then we should return the result, so break out of the
@@ -268,6 +252,16 @@ public class ObjectFactoryHelper impleme
return obj;
}
+ private Object getObjectFromFactory(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment, Attributes attrs, ObjectFactory factory) throws Exception {
+ Object result;
+ if (factory instanceof DirObjectFactory) {
+ result = ((DirObjectFactory) factory).getObjectInstance(obj, name, nameCtx, environment, attrs);
+ } else {
+ result = factory.getObjectInstance(obj, name, nameCtx, environment);
+ }
+ return result;
+ }
+
private static String getUrlScheme(String name) {
String scheme = name;
int index = name.indexOf(':');
Modified: aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/Utils.java
URL: http://svn.apache.org/viewvc/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/Utils.java?rev=1824947&r1=1824946&r2=1824947&view=diff
==============================================================================
--- aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/Utils.java (original)
+++ aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/Utils.java Wed Feb 21 09:05:26 2018
@@ -28,10 +28,13 @@ import org.osgi.service.jndi.JNDIConstan
import javax.naming.NamingException;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
+import java.util.concurrent.Callable;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -133,6 +136,24 @@ public final class Utils {
return AccessController.doPrivileged((PrivilegedAction<T>) action::get);
}
+ public interface Callable<V, E extends Exception> {
+ /**
+ * Computes a result, or throws an exception if unable to do so.
+ *
+ * @return computed result
+ * @throws Exception if unable to compute a result
+ */
+ V call() throws E;
+ }
+
+ public static <T, E extends Exception> T doPrivilegedE(Callable<T, E> action) throws E {
+ try {
+ return AccessController.doPrivileged((PrivilegedExceptionAction<T>) action::call);
+ } catch (PrivilegedActionException e) {
+ throw (E) e.getException();
+ }
+ }
+
private static class StackFinder extends SecurityManager {
public Class<?>[] getClassContext() {
return super.getClassContext();