Unsupported exception: Locale Date

I am using Local date in my Cuba app but getting unsupported exception as follows:


java.lang.UnsupportedOperationException
	at java.sql.Date.toInstant(Date.java:304)
	at com.company.web.ls.leaveapplication.LeaveApplicationEdit.handleRangeSelect(LeaveApplicationEdit.java:110)
	at com.company.web.ls.leaveapplication.LeaveApplicationEdit.lambda$postInit$2(LeaveApplicationEdit.java:82)
	at com.haulmont.bali.events.EventRouter.fireEvent(EventRouter.java:45)
	at com.haulmont.cuba.gui.data.impl.AbstractDatasource$ItemListener.propertyChanged(AbstractDatasource.java:307)
	at com.haulmont.chile.core.model.impl.AbstractInstance.propertyChanged(AbstractInstance.java:51)

my code that is causing this exception:


      LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                LocalDate end = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

Here is my complete code in case you want to have a look


  if(getItem().getStartDate() !=null && getItem().getEndDate() !=null) {
                BigDecimal dailyHours = leaveApplicationDs.getItem().getLeaveType().getHoursPerDay();
               
                long diff = getItem().getEndDate().getTime() - getItem().getStartDate().getTime();
                long totalDays = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS) + 1;

                getItem().setTotalHours(dailyHours.multiply(BigDecimal.valueOf(totalDays)));

                //load composition Entities
                LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
                LocalDate end = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

                if (leaveApplicationLineDs.size() > 0)
                    leaveApplicationLineDs.clear();
                
                for (LocalDate date = start; date.isEqual(end); date = date.plusDays(1)) {

                    //System.out.println(date);
                    LeaveApplicationLine line = metadata.create(LeaveApplicationLine.class);
                    Date date2 = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
                    line.setLeaveDate(date2);
                    line.setHours(dailyHours);
                    line.setLeaveApplication(getItem());
                    leaveApplicationLineDs.addItem(line);

                }
            }

Is this not supported by CUBA Framework?

As follows from the exception stacktrace, java.sql.Date does not support conversion to Instant. Try to do it this way:

Instant instant = Instant.ofEpochMilli(date.getTime());
2 Likes

Thank you Konstantin.

1 Like