Java 在可观察列表中编组本地日期

Java 在可观察列表中编组本地日期,java,javafx,jaxb,marshalling,fxml,Java,Javafx,Jaxb,Marshalling,Fxml,我有一份可以观察到的班级账单清单。此列表使用以下命令进行编组 public void saveBillsToFile(File file){ try{ JAXBContext context = JAXBContext .newInstance(BillListWrapper.class); Marshaller m = context.createMarshaller(); m.setPro

我有一份可以观察到的班级账单清单。此列表使用以下命令进行编组

    public void saveBillsToFile(File file){
    try{    
        JAXBContext context = JAXBContext
                .newInstance(BillListWrapper.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        BillListWrapper wrapper = new BillListWrapper();
        wrapper.setBills(budget.getBills());

        m.marshal(wrapper, file);

        //TODO setPersonFilePath(file);
    }catch(Exception e){
        e.printStackTrace(System.out);
    }
但是,当我将LocalDate对象属性添加到bill类时,我得到一个NoSuchMethodException。我发现一篇帖子说我需要创建一个XML适配器,比如

public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
public LocalDate unmarshal(String v) throws Exception {
    return LocalDate.parse(v);
}

public String marshal(LocalDate v) throws Exception {
    return v.toString();
}
}
公共类LocalDateAdapter扩展了XmlAdapter{
公共LocalDate解组器(字符串v)引发异常{
返回LocalDate.parse(v);
}
公共字符串封送处理程序(LocalDate v)引发异常{
return v.toString();
}
}
然而,我不确定该把它放在哪里。我想这和我的包装纸有关

@XmlRootElement(name = "bills")
public class BillListWrapper {

private List<Bill> bills;

@XmlElement(name = "bill")
public List<Bill> getBills() {
    return bills;
}

public void setBills(List<Bill> bills) {
    this.bills = bills;
}
@XmlRootElement(name=“bills”)
公共类BillListWrapper{
私人名单法案;
@xmlement(name=“bill”)
公开名单{
退票;
}
公共票据(清单票据){
这个。账单=账单;
}
法案类别:

public class Bill{

//Properties
private StringProperty name = new SimpleStringProperty();
private StringProperty description = new SimpleStringProperty();
private IntegerProperty amount = new SimpleIntegerProperty();
private IntegerProperty payable = new SimpleIntegerProperty();
private IntegerProperty allocatedAmount = new SimpleIntegerProperty();
private IntegerProperty owedAmount = new SimpleIntegerProperty();
private IntegerProperty priority = new SimpleIntegerProperty();
private IntegerProperty recurrence = new SimpleIntegerProperty();
private StringProperty payments = new SimpleStringProperty();
//private ObjectProperty<LocalDate> lastPayment = new SimpleObjectProperty<LocalDate>();
int originalAmount;
int originalOwed;


public Bill(){
    name.set("");
    amount.set(0);
    owedAmount.set(0);
    allocatedAmount.set(0);
    description.set("");
    payments.set("");
    originalAmount = 0;
}

public void allocate(int allocation){
    System.out.println(allocation);
    allocatedAmount.set(originalAmount + allocation);
    if(allocation > amount.get()){
        owedAmount.set(originalOwed - allocation + amount.get());
    }else if(allocation < amount.get()){
        owedAmount.set(originalOwed - allocation + amount.get());
    }else if(allocation == amount.get()){
        owedAmount.set(originalOwed);
    }

}

public void pay(){
    if(payable.get() <= allocatedAmount.get()){
        allocatedAmount.set(allocatedAmount.get() - payable.get());
    }else{
        Alert alert = new Alert(AlertType.ERROR);
        alert.setTitle("Error!");
        alert.setHeaderText("Can't Pay");
        alert.setContentText("There is not enough money allocated to pay this.\nChange the value and try again.");

        alert.showAndWait();
    }
}
 //Getters and setters removed
公共类法案{
//性质
私有StringProperty名称=新的SimpleStringProperty();
private StringProperty description=新的SimpleStringProperty();
private IntegerProperty amount=新的SimpleIntegerProperty();
private IntegerProperty Payment=新的SimpleIntegerProperty();
private IntegerProperty allocatedAmount=新的SimpleIntegerProperty();
private IntegerProperty owedAmount=新的SimpleIntegerProperty();
私有IntegerProperty优先级=新的SimpleIntegerProperty();
private IntegerProperty recurrence=新的SimpleIntegerProperty();
private StringProperty payments=新SimpleStringProperty();
//private ObjectProperty lastPayment=新的SimpleObject属性();
国际原始山脉;
国际原创;
公共法案(){
名称.集合(“”);
金额设置(0);
欧维达山集(0);
allocatedAmount.set(0);
description.set(“”);
付款。设置(“”);
原始计数=0;
}
公共无效分配(整数分配){
系统输出打印项次(分配);
allocatedAmount.set(originalAmount+分配);
如果(分配>金额.get()){
owedAmount.set(originalOwed-allocation+amount.get());
}else if(分配如果(payment.get(),你的
账单
类是什么样子的?我更新了帖子以包含类当询问异常时,总是发布异常的完整堆栈跟踪。添加堆栈跟踪你尝试添加到包装类了吗?