我得到了以下错误:
java.lang.NoSuchMethodException: Unknown property 'language' on class 'class java.lang.Class'使用的Rest调用: /Test/rest/Languages/insertobj/Japanese/Swedish%206
我正在使用: org.apache.commons.beanutils.PropertyUtils;
我确实在我的Languages类中有指定的属性'language‘,所以我不确定为什么它会抛出这个错误。当我这样声明它时,它就可以工作了:
Languages lanobj = new Lanaguages();
//Languages类
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();
}
}//TransactionManager代码片段:
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();
}
}发布于 2012-06-06 01:05:01
setProperty需要一个实例,而您传递的是类,请参见documentation
Class<?> c = Class.forName("com.test."+id);
Language language = (Language)c.newInstance();
PropertyUtils.setProperty(language , "language",language_id);要么特定地强制转换为Language,要么就将其保留为Object
Object object = Class.forName("com.test."+id).newInstance();
PropertyUtils.setProperty(object, "language",language_id);发布于 2012-06-06 01:03:27
您正尝试在"com.test."+id的类对象上设置属性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引用的类必须具有零参数构造函数,此代码才能工作。
发布于 2012-06-06 00:52:41
因为您的类Languages没有定义默认的构造函数,所以beanutils无法执行reflection.make,确保您的类中定义了默认的构造函数。
https://stackoverflow.com/questions/10901413
复制相似问题