Here is the situation. We're upgrading our servers to user java 1.4.1. We were previously running 1.3 A few of our web pages loop through collections and the user can modify something in the collection then save the changes. In 1.3 everything worked fine, no problems. However, when I switched to 1.4.1 (and tried 1.4.2) we started getting this error. I've tracked it down to this line in the PropertyUtils.java class:
-----------
if(descriptor instanceof IndexedPropertyDescriptor)
-----------
In 1.3 this was true. In 1.4 this returns false, and things go downhill from there.
Please, any help would be terrific. Thank you.
Code snippets & error are below:
.jsp page w/code:
<% int counter = 0; %>
<logic:iterate id="day" name="manualadjemplform" property="employeeWorkDay">
<bean:define id="idWorkDay" name="day" property="workDay" type="java.lang.String"/>
<bean:define id="idCases" name="day" property="cases" type="java.lang.String"/>
<bean:define id="idManualAdjId" name="day" property="manualAdjId" type="java.lang.String"/>
<% String baseProperty = "employeeWorkDay[" + (counter++) + "]";
String workDayProperty = baseProperty + ".workDay"; String commentProperty = baseProperty + ".comment"; String manualAdjIdProperty = baseProperty + ".manualAdjId"; %>
<tr>
<td align="left" nowrap>
<bean:write name="day" property="workDay"/>
<html:hidden name="day" property="<%=workDayProperty%>" value="<%=idWorkDay.toString()%>">
<bean:write name="day" property="workDay"/>
</html:hidden>
</td>
<td align="left" nowrap>
<html:text name="day" property="<%=casesProperty%>" value="<%=idCases.toString()%>" size="6" maxlength="6">
<logic:present name="day" property="cases">
<bean:write name="day" property="cases"/>
</logic:present>
<logic:notPresent name="day" property="cases">
 
</logic:notPresent>
</html:text>
</td>
<html:hidden name="day" property="<%=manualAdjIdProperty%>" value="<%=idManualAdjId.toString()%>">
<bean:write name="day" property="manualAdjId"/>
</html:hidden>
</tr>
</logic:iterate>
.jsp page rendered:
<tr>
<td align="left" nowrap>
Sunday
<input type="hidden" name="employeeWorkDay[0].workDay" value="Sunday">
</td>
<td align="left" nowrap>
<input type="text" name="employeeWorkDay[0].cases" maxlength="6" size="6" value="25">
</td>
<input type="hidden" name="employeeWorkDay[0].manualAdjId" value="2203.0">
</tr>
<tr>
<td align="left" nowrap>
Monday
<input type="hidden" name="employeeWorkDay[1].workDay" value="Monday">
</td>
<td align="left" nowrap>
<input type="text" name="employeeWorkDay[1].cases" maxlength="6" size="6" value="">
</td>
<input type="hidden" name="employeeWorkDay[1].manualAdjId" value=" ">
</tr>
FormBean: public class ManualAdjustmentEmployeeFormBean extends FormBean { private List employeeWorkDay= new ArrayList();
public void reset() { this.employeeWorkDay = new ArrayList(); }
public List getEmployeeWorkDay() { return employeeWorkDay; }
public void setEmployeeWorkDay(List employeeWorkDay) { this.employeeWorkDay = employeeWorkDay; }
public ManualAdjustmentEmployeeVO getEmployeeWorkDay(int index) {
while(index >=this.employeeWorkDay.size() ){
this.employeeWorkDay.add(new ManualAdjustmentEmployeeVO());
}
return (ManualAdjustmentEmployeeVO) this.employeeWorkDay.get(index);
}
}
Error: javax.servlet.ServletException: BeanUtils.populate
----- Root Cause -----
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:507)
at java.util.ArrayList.get(ArrayList.java:324)
at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:586)
at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:474)
at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:883)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:917)
at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1005)
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:919)
at com.ciber.arch.util.RequestUtils.populate(RequestUtils.java:513)
at com.ciber.arch.web.ArchServlet.process(ArchServlet.java:190)
at com.ciber.arch.web.ArchServlet.doPost(ArchServlet.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
at java.lang.Thread.run(Thread.java:534)
11:06:30,588 - [ERROR] localhost.Engine
StandardWrapperValve[controller]: Servlet.service() for servlet controller threw exception
javax.servlet.ServletException: BeanUtils.populate
at com.ciber.arch.util.RequestUtils.populate(RequestUtils.java:518)
at com.ciber.arch.web.ArchServlet.process(ArchServlet.java:190)
at com.ciber.arch.web.ArchServlet.doPost(ArchServlet.java:64)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
at java.lang.Thread.run(Thread.java:534)
_________________________________________________________________
Have fun customizing MSN Messenger — learn how here! http://www.msnmessenger-download.com/tracking/reach_customize
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]