diff --git a/core/src/main/java/org/acegisecurity/intercept/ObjectDefinitionSource.java b/core/src/main/java/org/acegisecurity/intercept/ObjectDefinitionSource.java
index b97c9b0fbc..6c095689c1 100644
--- a/core/src/main/java/org/acegisecurity/intercept/ObjectDefinitionSource.java
+++ b/core/src/main/java/org/acegisecurity/intercept/ObjectDefinitionSource.java
@@ -34,6 +34,11 @@ public interface ObjectDefinitionSource {
/**
* Accesses the ConfigAttributeDefinition that applies to a
* given secure object.
+ *
+ *
+ * Returns null if no ConfigAttribiteDefinition
+ * applies.
+ *
*
* @param object the object being secured
*
diff --git a/core/src/main/java/org/acegisecurity/intercept/method/MethodDefinitionAttributes.java b/core/src/main/java/org/acegisecurity/intercept/method/MethodDefinitionAttributes.java
index 89bdea224f..94d37d9155 100644
--- a/core/src/main/java/org/acegisecurity/intercept/method/MethodDefinitionAttributes.java
+++ b/core/src/main/java/org/acegisecurity/intercept/method/MethodDefinitionAttributes.java
@@ -103,7 +103,11 @@ public class MethodDefinitionAttributes extends AbstractMethodDefinitionSource {
// add the method level attributes for the implemented intreface methods
addInterfaceMethodAttributes(definition, invocation.getMethod());
- return definition;
+ if (definition.size() == 0) {
+ return null;
+ } else {
+ return definition;
+ }
}
private void add(ConfigAttributeDefinition definition, Collection attribs) {
diff --git a/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionAttributesTests.java b/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionAttributesTests.java
index c436bae86b..4f3ec7b748 100644
--- a/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionAttributesTests.java
+++ b/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionAttributesTests.java
@@ -26,6 +26,7 @@ import net.sf.acegisecurity.MockMethodInvocation;
import net.sf.acegisecurity.OtherTargetObject;
import net.sf.acegisecurity.SecurityConfig;
import net.sf.acegisecurity.TargetObject;
+import net.sf.acegisecurity.acl.basic.SomeDomain;
import net.sf.acegisecurity.context.ContextHolder;
import net.sf.acegisecurity.context.SecureContext;
import net.sf.acegisecurity.context.SecureContextImpl;
@@ -202,6 +203,15 @@ public class MethodDefinitionAttributesTests extends TestCase {
ContextHolder.setContext(null);
}
+ public void testNullReturnedIfZeroAttributesDefinedForMethodInvocation()
+ throws Exception {
+ // SomeDomain is not defined in the MockAttributes()
+ // (which getConfigAttributeDefinition refers to)
+ ConfigAttributeDefinition def = getConfigAttributeDefinition(SomeDomain.class,
+ "getId", null);
+ assertNull(def);
+ }
+
private ConfigAttributeDefinition getConfigAttributeDefinition(
Class clazz, String methodName, Class[] args) throws Exception {
final Method method = clazz.getMethod(methodName, args);
diff --git a/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionSourceEditorTests.java b/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionSourceEditorTests.java
index 4c950b9dc0..ca57e2e0fb 100644
--- a/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionSourceEditorTests.java
+++ b/core/src/test/java/org/acegisecurity/intercept/method/MethodDefinitionSourceEditorTests.java
@@ -157,6 +157,20 @@ public class MethodDefinitionSourceEditorTests extends TestCase {
assertEquals(expectedCountLength, returnedCountLength);
}
+ public void testNullIsReturnedByMethodDefinitionSourceWhenMethodInvocationNotDefined()
+ throws Exception {
+ MethodDefinitionSourceEditor editor = new MethodDefinitionSourceEditor();
+ editor.setAsText(
+ "net.sf.acegisecurity.TargetObject.countLength=ROLE_ONE,ROLE_TWO,RUN_AS_ENTRY");
+
+ MethodDefinitionMap map = (MethodDefinitionMap) editor.getValue();
+
+ ConfigAttributeDefinition configAttributeDefinition = map.getAttributes(new MockMethodInvocation(
+ TargetObject.class, "makeLowerCase",
+ new Class[] {String.class}));
+ assertNull(configAttributeDefinition);
+ }
+
public void testNullReturnsEmptyMap() {
MethodDefinitionSourceEditor editor = new MethodDefinitionSourceEditor();
editor.setAsText(null);