[ http://issues.apache.org/jira/browse/MYFACES-934?page=all ] Martin Marinschek closed MYFACES-934: -------------------------------------
> Parsing UserData in org.apache.myfaces.custom.date.HtmlInputDate.UserData > throws java.lang.NumberFormatException, not java.text.ParseException > ---------------------------------------------------------------------------------------------------------------------------------------------- > > Key: MYFACES-934 > URL: http://issues.apache.org/jira/browse/MYFACES-934 > Project: MyFaces > Type: Bug > Components: Tomahawk > Versions: 1.1.1, Nightly > Environment: windows, java 1.5.0_05, tomcat 5.5 > Reporter: Ulf Helmke > Priority: Minor > > Hello, > The UserData.parse method declares to throw aParseException. But it never > throws a ParseException, the Integer.parseInt throws a NumberFormatException > instead: > public Date parse() throws ParseException{ > Calendar tempCalendar=Calendar.getInstance(); > if (timeZone != null) > tempCalendar.setTimeZone(timeZone); > > tempCalendar.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day)); > tempCalendar.set(Calendar.MONTH,Integer.parseInt(month)-1); > tempCalendar.set(Calendar.YEAR,Integer.parseInt(year)); > if (uses_ampm) { > int int_hours = Integer.parseInt(hours); > // ampm hours must be in range 0-11 to be handled right; we > have to handle "12" specially > if (int_hours == 12) { > int_hours = 0; > } > tempCalendar.set(Calendar.HOUR,int_hours); > tempCalendar.set(Calendar.AM_PM,Integer.parseInt(ampm)); > } else { > tempCalendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt(hours)); > } > tempCalendar.set(Calendar.MINUTE,Integer.parseInt(minutes)); > tempCalendar.set(Calendar.SECOND,Integer.parseInt(seconds)); > tempCalendar.set(Calendar.MILLISECOND, 0); > > return tempCalendar.getTime(); > } > The most simple approach to solve it: Catch the NumberFormatException inside > the parse method and throw a new ParseException: > public Date parse() throws ParseException{ > Calendar tempCalendar=Calendar.getInstance(); > if (timeZone != null) > tempCalendar.setTimeZone(timeZone); > > try { > > tempCalendar.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day)); > > tempCalendar.set(Calendar.MONTH,Integer.parseInt(month)-1); > > tempCalendar.set(Calendar.YEAR,Integer.parseInt(year)); > if (uses_ampm) { > int int_hours = Integer.parseInt(hours); > // ampm hours must be in range 0-11 to > be handled right; we have to handle "12" specially > if (int_hours == 12) { > int_hours = 0; > } > > tempCalendar.set(Calendar.HOUR,int_hours); > > tempCalendar.set(Calendar.AM_PM,Integer.parseInt(ampm)); > } else { > > tempCalendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt(hours)); > } > > tempCalendar.set(Calendar.MINUTE,Integer.parseInt(minutes)); > > tempCalendar.set(Calendar.SECOND,Integer.parseInt(seconds)); > tempCalendar.set(Calendar.MILLISECOND, 0); > } catch (NumberFormatException e) { > throw new ParseException(e.getMessage(),0); > } > > return tempCalendar.getTime(); > } > It would be a good idea to write some new tests. The existing Tests do not > deal with invalid form data. > Greetings Ulf -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
