modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/DecoratingInitialContextFactory.java | 12 +++++++++- modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/AccessCheckingContextDecorator.java | 10 ++++++++ modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/URLPreferringContextDecorator.java | 10 ++++++++ modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/util/DecoratingInvocationHandler.java | 11 ++++++++- 4 files changed, 41 insertions(+), 2 deletions(-)
New commits: commit 583cdadd3ac3f2aabec176c57423895292fe6348 Author: Lukas Krejci lkrejci@redhat.com Date: Tue Jan 10 10:40:27 2012 +0100
Make sure the decorated contexts behave the same as the originals. hashCode and equals of the decorators are now taken from the original, the exceptions from the method calls are rethrown from the DispatchingInvocationHandler.
diff --git a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/DecoratingInitialContextFactory.java b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/DecoratingInitialContextFactory.java index 19b30ea..e0f1d84 100644 --- a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/DecoratingInitialContextFactory.java +++ b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/DecoratingInitialContextFactory.java @@ -96,5 +96,15 @@ public class DecoratingInitialContextFactory implements InitialContextFactory { if (cls.getSuperclass() != null) { getAllImplementedInterfaces(cls.getSuperclass(), output); } - } + } + + @Override + public int hashCode() { + return factory.hashCode(); + } + + @Override + public boolean equals(Object o) { + return factory.equals(o); + } } diff --git a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/AccessCheckingContextDecorator.java b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/AccessCheckingContextDecorator.java index 6bfec7e..8970b0a 100644 --- a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/AccessCheckingContextDecorator.java +++ b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/AccessCheckingContextDecorator.java @@ -251,4 +251,14 @@ public class AccessCheckingContextDecorator implements Context, ContextDecorator return str.substring(0, colon_posn); return null; } + + @Override + public int hashCode() { + return getOriginal() == null ? super.hashCode() : getOriginal().hashCode(); + } + + @Override + public boolean equals(Object o) { + return getOriginal() == null ? super.equals(o) : getOriginal().equals(o); + } } diff --git a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/URLPreferringContextDecorator.java b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/URLPreferringContextDecorator.java index 20077de..3f3a95d 100644 --- a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/URLPreferringContextDecorator.java +++ b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/context/URLPreferringContextDecorator.java @@ -209,4 +209,14 @@ public class URLPreferringContextDecorator implements Context, ContextDecorator, public String getNameInNamespace() throws NamingException { return getOriginal().getNameInNamespace(); } + + @Override + public int hashCode() { + return original == null ? super.hashCode() : original.hashCode(); + } + + @Override + public boolean equals(Object o) { + return original == null ? super.equals(o) : original.equals(o); + } } diff --git a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/util/DecoratingInvocationHandler.java b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/util/DecoratingInvocationHandler.java index 356a6e9..1bfa7ac 100644 --- a/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/util/DecoratingInvocationHandler.java +++ b/modules/enterprise/server/container-lib/src/main/java/org/rhq/jndi/util/DecoratingInvocationHandler.java @@ -20,6 +20,7 @@ package org.rhq.jndi.util;
import java.lang.reflect.InvocationHandler; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List;
@@ -41,6 +42,14 @@ public class DecoratingInvocationHandler<Type, Decorator extends Type> implement target = picker.decorate(target, methodClass); }
- return method.invoke(target, args); + try { + return method.invoke(target, args); + } catch (InvocationTargetException e) { + if (e.getCause() != null) { + throw e.getCause(); + } else { + throw e; + } + } } } \ No newline at end of file
rhq-commits@lists.fedorahosted.org