Eirc Zhao [http://community.jboss.org/people/zhaoxwen] created the discussion

"Help for java.lang.VerifyError when modify a method"

To view the discussion, visit: http://community.jboss.org/message/640621#640621

--------------------------------------------------------------
Hi,all,
     I write a class named Bsafproxy which will change the method  of the 
org.jdesktop.application.ResourceMap in the basf-1.9.jar; I don't know why it 
can not work, who will do me a faver, give me some idears, thanks.

     BTW, BsafProxy.java is my class, and the bsaf-1.9.jar is witch i wanna to 
modifed.


package org.eric.javassist;
 
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.CtNewMethod;
import javassist.Loader;
import javassist.NotFoundException;
 
/**
 * @author apple
 *
 */
public class BsafProxy {
 
  /**
           * @param args
           */
          public static void main(String[] args) {
                    try {
                              ClassPool csPool = ClassPool.getDefault();
                              
csPool.insertClassPath("/Users/apple/Documents/Eric/work/eclipse/workspace/HelloMac/bsaf-1.9.jar");
                              CtClass demoClass = 
csPool.get("org.jdesktop.application.ResourceMap");
  
                              CtMethod populateResourceMap = 
demoClass.getDeclaredMethod("populateResourceMap");
                              demoClass.removeMethod(populateResourceMap);
  
                              CtMethod newPopulate = 
CtNewMethod.make(getContent(), demoClass);
                              demoClass.addMethod(newPopulate);
  
//                              URL clazz = 
csPool.find("org.jdesktop.application.ResourceMap");
                              Loader loader = new Loader(csPool);
  Class clazz = loader.loadClass("org.jdesktop.application.ResourceMap");
                              clazz.newInstance();
                    } catch (NotFoundException e) {
  // TODO Auto-generated catch block
                              e.printStackTrace();
                    } catch (CannotCompileException e) {
  // TODO Auto-generated catch block
                              e.printStackTrace();
                    } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
                              e.printStackTrace();
                    } catch (InstantiationException e) {
  // TODO Auto-generated catch block
                              e.printStackTrace();
                    } catch (IllegalAccessException e) {
  // TODO Auto-generated catch block
                              e.printStackTrace();
                    }
          }
  
          private static String getContent() {
//                    private void populateResourceMap(String bundleName, 
Map<String, Object> bundlesMap) {
//                  try {
//                      ResourceBundle bundle = 
ResourceBundle.getBundle(bundleName, locale, classLoader);
//                      Enumeration<String> keys = bundle.getKeys();
//                      while (keys.hasMoreElements()) {
//                          String key = keys.nextElement();
//                          bundlesMap.put(key, bundle.getObject(key));
//                      }
//                  } catch (MissingResourceException ignore) {
//                      /* bundleName is just a location to check, it's not
//                       * guaranteed to name a ResourceBundle
//                       */
//                  }
//              }
                    StringBuffer content = new StringBuffer();
                    content.append("private void populateResourceMap(String 
bundleName, java.util.Map bundlesMap) {");
                    content.append("try {");
                    content.append("          java.util.ResourceBundle bundle = 
java.util.ResourceBundle.getBundle($1, locale, classLoader);");
                    content.append("          java.util.Enumeration keys = 
bundle.getKeys();");
                    content.append("          while (keys.hasMoreElements()) 
{");
                    content.append("                    String key = 
keys.nextElement();");
                    content.append("                    $2.put(key, 
bundle.getObject(key));");
                    content.append("          }");
                    content.append("} catch (java.util.MissingResourceException 
ignore) { }");
                    content.append("}");
                    return content.toString();
          }
 
}
 
ouput:
 
Exception in thread "main" java.lang.VerifyError: (class: 
org/jdesktop/application/ResourceMap, method: populateResourceMap signature: 
(Ljava/lang/String;Ljava/util/Map;)V) Incompatible argument to function
          at java.lang.Class.getDeclaredConstructors0(Native Method)
          at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
          at java.lang.Class.getConstructor0(Class.java:2699)
          at java.lang.Class.newInstance0(Class.java:326)
          at java.lang.Class.newInstance(Class.java:308)
          at org.eric.javassist.BsafProxy.main(BsafProxy.java:38)
 
--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/640621#640621]

Start a new discussion in Javassist at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2062]

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to