code: public static final boolean methodsEqual(Method remoteMethod, Method beanMethod)
      {
          if ((remoteMethod == null) || (beanMethod == null)) {
              return false;
          }
  
          //----------------------
          // Compare method names
          //----------------------
  
          if (!remoteMethod.getName().equals(beanMethod.getName())) {
              return false;
          }
  
          //-------------------------
          // Compare parameter types
          //-------------------------
  
          Class<?> remoteMethodParamTypes[] = remoteMethod.getParameterTypes();
          Class<?> beanMethodParamTypes[] = beanMethod.getParameterTypes();
  
          if (remoteMethodParamTypes.length != beanMethodParamTypes.length) {
              return false;
          }
  
          for (int i = 0; i < remoteMethodParamTypes.length; i++) {
              if (!remoteMethodParamTypes[i].equals(beanMethodParamTypes[i])) {
                  return false;
              }
          }
  
          //-----------------------------------------------------------------
          // If method names are equal and parameter types match then the
          // methods are equal for our purposes. Java does not allow methods
          // with the same name and parameter types that differ only in
          // return type and/or exception signature.
          //-----------------------------------------------------------------
  
          return true;
      }
docs: This utility method compares a method on the bean's remote
  interface with a method on the bean and returns true iff they
  are equal for the purpose of determining if the control
  descriptor associated with the bean method applies to the
  remote interface method. Equality in this case means the methods
  are identical except for the abstract modifier on the remote
  interface method.