Reputation: 148
I am writing a Spring Program which is working fine with MVC Architecture. But showing the below error after basic spring implementation.
Error creating bean with name 'manager' defined in class path resource [applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'SakilaDao' of bean class [com.java.Training.managerImpl.SakilaManagerImpl]: Bean property 'SakilaDao' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dao" class="com.java.Training.DaoImpl.SakilaDaoImpl">
</bean>
<bean id="manager" class="com.java.Training.managerImpl.SakilaManagerImpl">
<property name="SakilaDao" ref="dao"></property>
</bean>
</beans>
SakilaAction.java
package com.java.Training.action;
import java.util.ArrayList;
import java.util.HashMap;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.google.gson.Gson;
import com.java.Training.manager.SakilaManager;
import com.java.Training.managerImpl.SakilaManagerImpl;
import com.java.Training.model.SakilaPojo;
public class SakilaAction {
// PARAMETERS
private String start;
private String limit;
private String sort;
private String filter;
// RETURN VALUE
private String result;
// SakilaManager manager= new SakilaManagerImpl();
private HashMap <String, Object> dataMap= new HashMap <String, Object>();
public String getData() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
SakilaManager manager = (SakilaManager) context.getBean("manager");
try {
ArrayList <SakilaPojo> jArray= (ArrayList<SakilaPojo>) manager.getData(Integer.parseInt(start), Integer.parseInt(limit), filter, sort);
Integer count= manager.getCount(Integer.parseInt(start), Integer.parseInt(limit), filter);
dataMap.put("Data", jArray);
dataMap.put("Total", count);
}
catch(Exception e) {
e.printStackTrace();
}
Gson gson = new Gson();
setResult(gson.toJson(dataMap));
return "success";
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getLimit() {
return limit;
}
public void setLimit(String limit) {
this.limit = limit;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getFilter() {
return filter;
}
public void setFilter(String filter) {
this.filter = filter;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
SakilaManagerImpl.java
package com.java.Training.managerImpl;
import java.util.List;
import com.java.Training.Dao.SakilaDao;
import com.java.Training.DaoImpl.SakilaDaoImpl;
import com.java.Training.manager.SakilaManager;
import com.java.Training.model.SakilaPojo;
public class SakilaManagerImpl implements SakilaManager{
SakilaDaoImpl dao;
// = new SakilaDaoImpl();
public List<SakilaPojo> getData(Integer start, Integer limit, String filter, String sort) {
return dao.getData(start, limit, filter, sort);
}
public int getCount(Integer start, Integer limit, String filter) {
return dao.getCount(start, limit, filter);
}
public SakilaDaoImpl getDao() {
return dao;
}
public void setDao(SakilaDaoImpl dao) {
this.dao = dao;
}
}
SakilaManager.java
package com.java.Training.manager;
import java.util.List;
import com.java.Training.model.SakilaPojo;
public interface SakilaManager {
public List<SakilaPojo> getData(Integer start, Integer limit, String filter, String sort);
public int getCount(Integer start, Integer limit, String filter);
}
In SakilaManagerImpl.java I've tried using SakilaDao dao;
in place of SakilaDaoImpl dao;
which is the Interface of SakilaDaoImpl
class. But same it's throwing the same error.
Upvotes: 0
Views: 2705
Reputation: 56
the property name in the xml must match the field name in SakilaManagerImpl
<bean id="manager" class="com.java.Training.managerImpl.SakilaManagerImpl">
<property name="dao" ref="dao"></property>
</bean>
Upvotes: 2