0

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

在用户类中:

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

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

前:

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);
  }
}

我认为我做错了转换,因为我现在遇到了不可解析的日期错误。奇怪的是,即使我将 if-else 或 try-catch 块放在 read 和 write 方法中,我仍然会收到错误。

所以我认为主要问题是,我如何正确地编写一个像 JAXB 这样的适配器来编组/解组 XML 中的字符串和 Date 对象。

4

1 回答 1

0

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

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

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

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

于 2010-09-14T20:55:51.467 回答