Author: dblevins
Date: Tue Jun 10 23:59:16 2008
New Revision: 666543
URL: http://svn.apache.org/viewvc?rev=666543&view=rev
Log:
Improved the validation check on methods to see if you had mismatched arguments
or potentially used a different case
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java?rev=666543&r1=666542&r2=666543&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckMethods.java
Tue Jun 10 23:59:16 2008
@@ -25,6 +25,8 @@
import javax.ejb.EJBLocalObject;
import java.lang.reflect.Method;
+import java.util.List;
+import java.util.ArrayList;
public class CheckMethods extends ValidationBase {
@@ -76,17 +78,32 @@
}
Method[] interfaceMethods = intrface.getMethods();
- Method[] beanClassMethods = intrface.getMethods();
for (int i = 0; i < interfaceMethods.length; i++) {
if (interfaceMethods[i].getDeclaringClass() ==
EJBLocalObject.class) continue;
+ String name = interfaceMethods[i].getName();
try {
- String name = interfaceMethods[i].getName();
Class[] params = interfaceMethods[i].getParameterTypes();
Method beanMethod = beanClass.getMethod(name, params);
} catch (NoSuchMethodException nsme) {
+ List<Method> differentArgs = new ArrayList<Method>();
+ List<Method> differentCase = new ArrayList<Method>();
- fail(b, "no.busines.method", interfaceMethods[i].getName(),
interfaceMethods[i].toString(), "local", intrface.getName(),
beanClass.getName());
+ for (Method method : beanClass.getMethods()) {
+ if (method.getName().equals(name)){
+ differentArgs.add(method);
+ } else if (method.getName().equalsIgnoreCase(name)){
+ differentCase.add(method);
+ }
+ }
+
+ if (differentArgs.size() > 0) {
+ fail(b, "no.busines.method.args",
interfaceMethods[i].getName(), interfaceMethods[i].toString(), "local",
intrface.getName(), beanClass.getName(), differentArgs.size());
+ } else if (differentCase.size() > 0){
+ fail(b, "no.busines.method.case",
interfaceMethods[i].getName(), interfaceMethods[i].toString(), "local",
intrface.getName(), beanClass.getName(), differentCase.size());
+ } else {
+ fail(b, "no.busines.method",
interfaceMethods[i].getName(), interfaceMethods[i].toString(), "local",
intrface.getName(), beanClass.getName());
+ }
}
}
@@ -104,18 +121,32 @@
}
Method[] interfaceMethods = intrface.getMethods();
- Method[] beanClassMethods = intrface.getMethods();
for (int i = 0; i < interfaceMethods.length; i++) {
if (interfaceMethods[i].getDeclaringClass() ==
javax.ejb.EJBObject.class) continue;
+ String name = interfaceMethods[i].getName();
try {
- String name = interfaceMethods[i].getName();
Class[] params = interfaceMethods[i].getParameterTypes();
Method beanMethod = beanClass.getMethod(name, params);
} catch (NoSuchMethodException nsme) {
+ List<Method> differentArgs = new ArrayList<Method>();
+ List<Method> differentCase = new ArrayList<Method>();
- fail(b, "no.busines.method", interfaceMethods[i].getName(),
interfaceMethods[i].toString(), "remote", intrface.getName(),
beanClass.getName());
+ for (Method method : beanClass.getMethods()) {
+ if (method.getName().equals(name)){
+ differentArgs.add(method);
+ } else if (method.getName().equalsIgnoreCase(name)){
+ differentCase.add(method);
+ }
+ }
+ if (differentArgs.size() > 0) {
+ fail(b, "no.busines.method.args",
interfaceMethods[i].getName(), interfaceMethods[i].toString(), "remote",
intrface.getName(), beanClass.getName(), differentArgs.size());
+ } else if (differentCase.size() > 0){
+ fail(b, "no.busines.method.case",
interfaceMethods[i].getName(), interfaceMethods[i].toString(), "remote",
intrface.getName(), beanClass.getName(), differentCase.size());
+ } else {
+ fail(b, "no.busines.method",
interfaceMethods[i].getName(), interfaceMethods[i].toString(), "remote",
intrface.getName(), beanClass.getName());
+ }
}
}
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=666543&r1=666542&r2=666543&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
Tue Jun 10 23:59:16 2008
@@ -64,6 +64,16 @@
2.no.busines.method Business method {0} not implemented.
3.no.busines.method Business method {1} not implemented. The method was
declared in the {2} interface {3}, but not implemented in the ejb class {4}
+# fail(b, "no.busines.method.args", interfaceMethods[i].getName(),
interfaceMethods[i].toString(), "local", intrface.getName(),
beanClass.getName(), differentArgs.size());
+1.no.busines.method.args No such business method. Wrong arguments.
+2.no.busines.method.args Business method {0} arguments do not match.
+3.no.busines.method.args Business method {1} not implemented. The method
was declared in the {2} interface {3}, but not implemented in the ejb class
{4}. There are {5} method that have the same name but different arguments.
+
+# fail(b, "no.busines.method.case", interfaceMethods[i].getName(),
interfaceMethods[i].toString(), "local", intrface.getName(),
beanClass.getName(), differentCase.size());
+1.no.busines.method.case No such business method. Possible
case-sensitive mismatch.
+2.no.busines.method.case Business method {0} not implemented. Possible
case-sensitive mismatch.
+3.no.busines.method.case Business method {1} not implemented. The method
was declared in the {2} interface {3}, but not implemented in the ejb class
{4}. There are {5} method that have the same name but using a different case.
+
# 0 - home interface
# 1 - remote interface
1.no.home.create No create method.