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.


Reply via email to