Spring: Bean 属性 不可写或具有无效的 setter 方法
Spring: Bean property is not writable or has an invalid setter method
我知道这个问题已经被问过多次,但在我看来一切都是正确的。我还从 Eclipse 中删除了我的代码并让 IDE 创建 getters/setters 但无济于事。
这是我在 weblogic 中的错误:
原因:org.springframework.beans.NotWritablePropertyException:bean class [com.fedex.dire.webservices.direservice.dao.GPSDataDaoImpl] 的 属性 'gpsDataAllStopsSql' 无效:Bean 属性 'gpsDataAllStopsSql' 不可写或具有无效的 setter 方法。 setter的参数类型是否匹配getter的return类型?
这是我的 Bean & 属性 在我的上下文中:
<bean id="dataDao" class="com.text.service.dao.DataDaoImpl" >
<property name="dataSource" ref="dataSource" />
<property name="gpsDataAllStopsSql">
<value><![CDATA[SELECT A.XML_DATA,B.ADDR1,B.ADDR2,B.POSTALCODE FROM GPS.EVENT_STAMP A LEFT OUTER JOIN DB.SCAN B ON A.FAC_IORG_NBR=B.FACILITY AND A.SCANNER_DATE=B.SCANDATE AND A.SCANNER_ID=B.SCANNERID AND A.PD_START_TIME=B.PDSTART WHERE FAC_IORG_NBR = ? AND SCANNER_DATE = CAST(? AS DATE) AND SCANNER_ID = ? AND PD_START_TIME = ?]]></value>
</property>
<property name="gpsDataSql">
<value><![CDATA[SELECT A.XML_DATA,A.STOP_NUMBER,B.ADDR1,B.ADDR2,B.POSTALCODE FROM GPS.EVENT_STAMP A LEFT OUTER JOIN DB.SCAN B ON A.STOP_NUMBER=B.STOP# AND A.FAC_IORG_NBR=B.FACILITY AND A.SCANNER_DATE=B.SCANDATE AND A.SCANNER_ID=B.SCANNERID AND A.PD_START_TIME=B.PDSTART WHERE FAC_IORG_NBR = ? AND SCANNER_DATE = CAST(? AS DATE) AND SCANNER_ID = ? AND PD_START_TIME = ? AND STOP_NUMBER = ?]]></value>
</property>
</bean>
这是我的 DaoImpl 中的 getter 和 setter 方法:
private static String gpsDataSql = null;
private static String gpsDataAllStopsSql = null;
public static String getGpsDataSql() {
return gpsDataSql;
}
public static void setGpsDataSql(String gpsDataSql) {
DataDaoImpl.gpsDataSql = gpsDataSql;
}
public static String getGpsDataAllStopsSql() {
return gpsDataAllStopsSql;
}
public static void setGpsDataAllStopsSql(String gpsDataAllStopsSql) {
DataDaoImpl.gpsDataAllStopsSql = gpsDataAllStopsSql;
}
是不是我的眼睛在滑过什么东西,还是我的环境有其他问题?
谢谢!
您在 XML 中声明的 bean 试图设置 DataDaoImpl
class 中存在的属性。为了使其正常工作,请删除静态成员并为您的 class:
尝试以下操作
package com.text.service.dao;
public class DataDaoImpl extends SomeOtherDaoWhereDataSourceIsDefined {
private String gpsDataAllStopsSql;
private String gpsDataSql;
public String getGpsDataAllStopsSql() {
return gpsDataAllStopsSql;
}
public void setGpsDataAllStopsSql(String gpsDataAllStopsSql) {
this.gpsDataAllStopsSql = gpsDataAllStopsSql;
}
public String getGpsDataSql() {
return gpsDataSql;
}
public void setGpsDataSql(String gpsDataSql) {
this.gpsDataSql = gpsDataSql;
}
}
This article 解释了静态成员与非静态成员的用法。
我知道这个问题已经被问过多次,但在我看来一切都是正确的。我还从 Eclipse 中删除了我的代码并让 IDE 创建 getters/setters 但无济于事。
这是我在 weblogic 中的错误:
原因:org.springframework.beans.NotWritablePropertyException:bean class [com.fedex.dire.webservices.direservice.dao.GPSDataDaoImpl] 的 属性 'gpsDataAllStopsSql' 无效:Bean 属性 'gpsDataAllStopsSql' 不可写或具有无效的 setter 方法。 setter的参数类型是否匹配getter的return类型?
这是我的 Bean & 属性 在我的上下文中:
<bean id="dataDao" class="com.text.service.dao.DataDaoImpl" >
<property name="dataSource" ref="dataSource" />
<property name="gpsDataAllStopsSql">
<value><![CDATA[SELECT A.XML_DATA,B.ADDR1,B.ADDR2,B.POSTALCODE FROM GPS.EVENT_STAMP A LEFT OUTER JOIN DB.SCAN B ON A.FAC_IORG_NBR=B.FACILITY AND A.SCANNER_DATE=B.SCANDATE AND A.SCANNER_ID=B.SCANNERID AND A.PD_START_TIME=B.PDSTART WHERE FAC_IORG_NBR = ? AND SCANNER_DATE = CAST(? AS DATE) AND SCANNER_ID = ? AND PD_START_TIME = ?]]></value>
</property>
<property name="gpsDataSql">
<value><![CDATA[SELECT A.XML_DATA,A.STOP_NUMBER,B.ADDR1,B.ADDR2,B.POSTALCODE FROM GPS.EVENT_STAMP A LEFT OUTER JOIN DB.SCAN B ON A.STOP_NUMBER=B.STOP# AND A.FAC_IORG_NBR=B.FACILITY AND A.SCANNER_DATE=B.SCANDATE AND A.SCANNER_ID=B.SCANNERID AND A.PD_START_TIME=B.PDSTART WHERE FAC_IORG_NBR = ? AND SCANNER_DATE = CAST(? AS DATE) AND SCANNER_ID = ? AND PD_START_TIME = ? AND STOP_NUMBER = ?]]></value>
</property>
</bean>
这是我的 DaoImpl 中的 getter 和 setter 方法:
private static String gpsDataSql = null;
private static String gpsDataAllStopsSql = null;
public static String getGpsDataSql() {
return gpsDataSql;
}
public static void setGpsDataSql(String gpsDataSql) {
DataDaoImpl.gpsDataSql = gpsDataSql;
}
public static String getGpsDataAllStopsSql() {
return gpsDataAllStopsSql;
}
public static void setGpsDataAllStopsSql(String gpsDataAllStopsSql) {
DataDaoImpl.gpsDataAllStopsSql = gpsDataAllStopsSql;
}
是不是我的眼睛在滑过什么东西,还是我的环境有其他问题?
谢谢!
您在 XML 中声明的 bean 试图设置 DataDaoImpl
class 中存在的属性。为了使其正常工作,请删除静态成员并为您的 class:
package com.text.service.dao;
public class DataDaoImpl extends SomeOtherDaoWhereDataSourceIsDefined {
private String gpsDataAllStopsSql;
private String gpsDataSql;
public String getGpsDataAllStopsSql() {
return gpsDataAllStopsSql;
}
public void setGpsDataAllStopsSql(String gpsDataAllStopsSql) {
this.gpsDataAllStopsSql = gpsDataAllStopsSql;
}
public String getGpsDataSql() {
return gpsDataSql;
}
public void setGpsDataSql(String gpsDataSql) {
this.gpsDataSql = gpsDataSql;
}
}
This article 解释了静态成员与非静态成员的用法。