将XML数据直接解组到对象中

时间:2010-09-14 15:47:01

标签: java xml-deserialization simple-framework

我正在尝试使用SimpleXML从Java中解析XML对象中的数据。整个过程的重点是将API从JAXB转换为SimpleXML。因此,我使用了解析文档的注释方式。这是一些代码:

在User类中:

@Element(name="created", required=false)
private Date created;

编写API的程序员使用DateAdapter将从XML中提取的String直接转换为日期。我试图将其转换为SimpleXML。我的假设是变压器采用了相同的方法。这是代码之前和之后的代码......

在:

public class DateAdapter extends XmlAdapter<String, Date> {

  DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  public Date unmarshal(String date) throws Exception {
    return df.parse(date);
  }

  public String marshal(Date date) throws Exception {
    return df.format(date);
  }
}

后:

public class DateAdapter implements Transform<Date> {
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  @Override
  public Date read(String date) throws Exception {
    return df.parse(date);
  }

  @Override
  public String write(Date date) throws Exception {
    return df.format(date);
  }
}

我认为我的转换错误,因为我现在收到了Unparsable日期错误。奇怪的是,即使我在读取和写入方法中放置了if-else或try-catch块,我仍然会收到错误。

所以我认为主要的问题是,我如何正确地编写一个像JAXB那样的适配器来对来自XML的String和Date对象进行编组/解组。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。它与我自己编写的API无关,而是在实际XML框架解组时将double转换为日期。存储在XML中的双精度数以秒为单位的纪元时间,小数点为毫秒。 SimpleXML似乎无法正确处理小数。我的解决方法是只需要一个double而不是将数据解组到Date中。所以我摆脱了整个适配器,只是改变了

@Element(name="created", required=false)
private Date created;

@Element(name="created", required=false)
private double created;

我确信有一种方法可以将Simple转换为Date之后的事实,但我认为最好保持原样。