2010-07-15 62 views
0

私人字符串getEmailTemplateWithActualValueForAccount(字符串模板,客戶帳戶)拋出:IllegalArgumentException - ,IllegalAccessException,{的InvocationTargetException例外,在java中

Map<String,String> map = new HashMap<String, String>(); 
    List<String> listTags = new ArrayList<String>(); 
    Map<Method, String> methodList = new HashMap<Method, String>(); 

    int startIndex=0; 
    int endIndex=0; 

    for(int i=0; i<template.length(); i++) 
    { 
     char ch = template.charAt(i); 
     if(ch=='$') 
      startIndex = i+1; 
     if(ch=='#') 
     { 
      endIndex = i+1; 
      listTags.add(template.substring(startIndex,endIndex)); 
     } 

    } 

    Method[] methods = Account.class.getMethods(); 

    for (Method method : methods) { 
     String methodName = method.getName(); 
     if(method.getName().startsWith("get")) 
     { 
      methodList.put(method, methodName.substring(3,methodName.length()).toUpperCase()+"#"); 
     } 
    } 

    Set<Method> methodKeySet = methodList.keySet(); 
    for (Method method : methodKeySet) { 
     for (String string : listTags) { 

      if(methodList.get(method).equals(string)) 
      { 
       try{ 
        Object obj = method.invoke(account, null); 
        if(obj!=null) 
         map.put(string, obj.toString()); 
       }catch(NullPointerException e){ 
       } 
      } 
     } 
    } 

    final StringBuilder list = new StringBuilder("\\$("); 
    for(final String key: map.keySet()) 
    { 
     list.append(key); 
     list.append("|"); 
    } 
    list.append("[^\\s\\S])"); 
    Pattern pattern = Pattern.compile(list.toString()); 
    Matcher matcher = pattern.matcher(template); 


    final StringBuffer stringBuffer = new StringBuffer(); 
    while(matcher.find()){ 
     final String string = matcher.group(1); 
     matcher.appendReplacement(stringBuffer, map.get(string)); 
    } 
    matcher.appendTail(stringBuffer); 

    return stringBuffer.toString(); 
} 

我在代碼「對象OBJ = method.invoke線異常(賬號,空) ;」 代碼完全正常工作,但由於此代碼在調度程序中,它將在jboss服務器上每20秒創建一個日誌。

+1

如果您將問題添加到問題中,您會得到更好的回覆。你有代碼拋出它嗎?如果是這樣發佈。你擔心抓住它嗎?如果是這樣,有什麼方法拋出它,你擔心? – corsiKa 2010-07-15 13:39:08

+0

你能提供你的代碼拋出這個異常嗎? – Longball27 2010-07-15 13:44:21

+0

...所以代碼不完美,對不對?只是因爲代碼編譯,並不能完全按照你想要的方式工作。很明顯,在這種情況下它並不是,所以事實上並不是「完美的工作」。 – polygenelubricants 2010-07-15 13:46:40

回答

0

根據Javadoc,Method的invoke方法會拋出InvocationTargetException「如果基礎方法拋出異常」。所以你最好看看你正在調用的方法來找出它拋出異常的原因。檢查異常堆棧跟蹤以查找根本原因。

0

而不是捕獲NullPointerException,你應該趕上InvocationTargetException,並檢查包裝的異常。