2012-06-05 119 views
0

林 '語言' 一得到follwoing錯誤:java.lang.NoSuchMethodException:未知屬性的類 '類java.lang.Class'

java.lang.NoSuchMethodException: Unknown property 'language' on class 'class java.lang.Class' 

REST調用中使用:/測試/ REST /語言/ INSERTOBJ /日文/瑞典文%206

我正在使用:org.apache.commons.beanutils.PropertyUtils;

我在我的Languages類中有指定的屬性'語言',所以我不知道爲什麼它會拋出錯誤。它適用於當我宣佈其如此:

語言lanobj = new Lanaguages();

//語言類

public class Languages implements java.io.Serializable { 
    private String language; 
    private String displayName; 

public Languages() { 
     this.language = null; 
     this.displayName = null; 
    } 


public Languages(String language, String displayName) { 
    this.language = language; 
    this.displayName = displayName; 
} 

public void setLanguageId(Long languageId) { 
    this.languageId = languageId; 
} 

@Column(name = "language", nullable = false, length = 50) 
public String getLanguage() { 
    return this.language; 
} 

public void setLanguage(String language) { 
    this.language = language; 
} 

@Column(name = "displayName", nullable = false, length = 50) 
public String getDisplayName() { 
    return this.displayName; 
} 

public void setDisplayName(String displayName) { 
    this.displayName = displayName; 
} 

} 

///資源管理器代碼

@Path("{subResources}/insertobj/{language-id}/{displayname-id}") 
//@POST 
@GET // Using get for the sake of making rest call with browser 
@Produces(MediaType.TEXT_HTML) 
public String getLanguageById(@PathParam("subResources") String id, 
          @PathParam("language-id") String language_id, 
          @PathParam("displayname-id") String displayname_id) 
{ 
    try{ 
     Class<?> c = Class.forName("com.test."+id); 
     PropertyUtils.setProperty(c, "language",language_id); 
     PropertyUtils.setProperty(c, "displayName",displayname_id); 
     TransactionManager.createObject(c);  

    }catch (Exception exc){ 
     exc.printStackTrace();  
    } 

} 

//事務管理段:

public static void createObject(Object entityObject) { 
    Transaction tx = null; 
    //SessionFactoryUtil.getInstance().openSession(); 
    Session session = SessionFactoryUtil.openSession(); 
    try { 
     tx = session.beginTransaction();   
     session.save(entityObject);   
     tx.commit(); 
    } 
    catch (RuntimeException e) 
    { 
     if (tx != null && tx.isActive()) 
     { 
     try 
     { 
      // Second try catch as the rollback could fail as well 
      tx.rollback(); 
     } 
     catch (HibernateException e1) { 
      //logger.debug(「Error rolling back transaction」); 
     } 
     // throw again the first exception 
     throw e; 
     } 
    } 
    finally 
    { 
     session.close(); 
    } 
    } 

回答

1

setProperty需要一個實例,而你正在過班,看到documentation

Class<?> c = Class.forName("com.test."+id); 
Language language = (Language)c.newInstance(); 
PropertyUtils.setProperty(language , "language",language_id); 

要麼你specificially轉換爲Language,否則你可以把它作爲Object

Object object = Class.forName("com.test."+id).newInstance(); 
PropertyUtils.setProperty(object, "language",language_id); 
+0

downvoter care to comment – mprabhat

+0

我沒有投票給你,但你的原始答案是三行代碼,沒有任何解釋。您稍後將文字轉換爲實際答案。有些人認爲這種風格不好。 –

+0

謝謝你的工作。 – Fabii

0

由於類Languages是不是有默認的構造函數定義beanutils不能做反射。確保你有默認在你的類中定義的構造函數。

+0

我添加了一個默認構造函數我仍然得到相同的錯誤。檢查上面的代碼編輯。謝謝 – Fabii

5

您正嘗試在"com.test."+id的Class對象上設置屬性language。您需要創建此類的實例以設置值。例如:

try{ 
    Class<?> c = Class.forName("com.test."+id); 
    Object o = c.newInstance(); 
    PropertyUtils.setProperty(o, "language",language_id); 
    PropertyUtils.setProperty(o, "displayName",displayname_id); 
    TransactionManager.createObject(o);  

}catch (Exception exc){ 
    exc.printStackTrace();  
} 

c引用的類必須具有零參數構造函數才能使此代碼正常工作。

+1

這與休眠和休息btw無關。 –

+0

正確答案+1,你的打字速度比我的快:) – mprabhat

+0

謝謝你的工作。對不起,我不確定要使用什麼標籤:) – Fabii

相關問題