public String getDigest()
  {
    try {
      if (_className == null || "".equals(_className))
        return "";
      
      DynamicClassLoader loader
        = (DynamicClassLoader) Thread.currentThread().getContextClassLoader();

      ClassLoader tmpLoader = loader.getNewTempClassLoader();
      
      Class cl = Class.forName(_className, false, tmpLoader);
      
      if (cl == null)
        return "";

      MessageDigest digest = MessageDigest.getInstance("MD5");

      addDigest(digest, cl.getName());

      addDigest(digest, cl.getModifiers());

      Class superClass = cl.getSuperclass();
      if (superClass != null)
        addDigest(digest, superClass.getName());

      Class []interfaces = cl.getInterfaces();
      for (int i = 0; i < interfaces.length; i++)
        addDigest(digest, interfaces[i].getName());

      Field []fields = cl.getDeclaredFields();

      Arrays.sort(fields, new FieldComparator());

      if (_checkFields) {
        for (Field field : fields) {
          if (Modifier.isPrivate(field.getModifiers())
              && ! _checkPrivate)
            continue;
          if (Modifier.isProtected(field.getModifiers())
              && ! _checkProtected)
            continue;
          
          addDigest(digest, field.getName());
          addDigest(digest, field.getModifiers());
          addDigest(digest, field.getType().getName());

          addDigest(digest, field.getAnnotations());
        }
      }

      Method []methods = cl.getDeclaredMethods();
      Arrays.sort(methods, new MethodComparator());
      
      for (int i = 0; i < methods.length; i++) {
        Method method = methods[i];

        if (Modifier.isPrivate(method.getModifiers()) && ! _checkPrivate)
          continue;
        if (Modifier.isProtected(method.getModifiers()) && ! _checkProtected)
          continue;
        if (Modifier.isStatic(method.getModifiers()) && ! _checkStatic)
          continue;
          
        addDigest(digest, method.getName());
        addDigest(digest, method.getModifiers());
        addDigest(digest, method.getName());

        Class []param = method.getParameterTypes();
        for (int j = 0; j < param.length; j++)
          addDigest(digest, param[j].getName());

        addDigest(digest, method.getReturnType().getName());

        Class []exn = method.getExceptionTypes();
        for (int j = 0; j < exn.length; j++)
          addDigest(digest, exn[j].getName());

        addDigest(digest, method.getAnnotations());
      }
      
      byte []digestBytes = new byte[256];
      
      int len = digest.digest(digestBytes, 0, digestBytes.length);
      
      return digestToBase64(digestBytes, len);
    } catch (Exception e) {
      log.log(Level.FINER, e.toString(), e);

      return "";
    }
  }
public String getDigest ( ) { try { if ( _className == null || "" . equals ( _className ) ) return "" ; DynamicClassLoader loader = ( DynamicClassLoader ) Thread . currentThread ( ) . getContextClassLoader ( ) ; ClassLoader tmpLoader = loader . getNewTempClassLoader ( ) ; Class cl = Class . forName ( _className , false , tmpLoader ) ; if ( cl == null ) return "" ; MessageDigest digest = MessageDigest . getInstance ( "MD5" ) ; addDigest ( digest , cl . getName ( ) ) ; addDigest ( digest , cl . getModifiers ( ) ) ; Class superClass = cl . getSuperclass ( ) ; if ( superClass != null ) addDigest ( digest , superClass . getName ( ) ) ; Class [ ] interfaces = cl . getInterfaces ( ) ; for ( int i = 0 ; i < interfaces . length ; i ++ ) addDigest ( digest , interfaces [ i ] . getName ( ) ) ; Field [ ] fields = cl . getDeclaredFields ( ) ; Arrays . sort ( fields , new FieldComparator ( ) ) ; if ( _checkFields ) { for ( Field field : fields ) { if ( Modifier . isPrivate ( field . getModifiers ( ) ) && ! _checkPrivate ) continue ; if ( Modifier . isProtected ( field . getModifiers ( ) ) && ! _checkProtected ) continue ; addDigest ( digest , field . getName ( ) ) ; addDigest ( digest , field . getModifiers ( ) ) ; addDigest ( digest , field . getType ( ) . getName ( ) ) ; addDigest ( digest , field . getAnnotations ( ) ) ; } } Method [ ] methods = cl . getDeclaredMethods ( ) ; Arrays . sort ( methods , new MethodComparator ( ) ) ; for ( int i = 0 ; i < methods . length ; i ++ ) { Method method = methods [ i ] ; if ( Modifier . isPrivate ( method . getModifiers ( ) ) && ! _checkPrivate ) continue ; if ( Modifier . isProtected ( method . getModifiers ( ) ) && ! _checkProtected ) continue ; if ( Modifier . isStatic ( method . getModifiers ( ) ) && ! _checkStatic ) continue ; addDigest ( digest , method . getName ( ) ) ; addDigest ( digest , method . getModifiers ( ) ) ; addDigest ( digest , method . getName ( ) ) ; Class [ ] param = method . getParameterTypes ( ) ; for ( int j = 0 ; j < param . length ; j ++ ) addDigest ( digest , param [ j ] . getName ( ) ) ; addDigest ( digest , method . getReturnType ( ) . getName ( ) ) ; Class [ ] exn = method . getExceptionTypes ( ) ; for ( int j = 0 ; j < exn . length ; j ++ ) addDigest ( digest , exn [ j ] . getName ( ) ) ; addDigest ( digest , method . getAnnotations ( ) ) ; } byte [ ] digestBytes = new byte [ 256 ] ; int len = digest . digest ( digestBytes , 0 , digestBytes . length ) ; return digestToBase64 ( digestBytes , len ) ; } catch ( Exception e ) { log . log ( Level . FINER , e . toString ( ) , e ) ; return "" ; } }
Calculates a MD5 digest of the class.