如何将 joda-time 与 jaxb 绑定

ams*_*alk 4 java jaxb jodatime

我正在上这样的课

@XmlRootElement(name = "executionStats")
public class ScriptExecutionStatistics {

private DateTime start;
private DateTime end;

public ScriptExecutionStatistics() { }

public ScriptExecutionStatistics(DateTime start, DateTime end) {
    this.start = start;
    this.end = end;
}

@XmlAttribute
public DateTime getStart() {
    return start;
}

public void setStart(DateTime start) {
    this.start = start;
}

@XmlAttribute
public DateTime getEnd() {
    return end;
}

public void setEnd(DateTime end) {
    this.end = end;
}

}
Run Code Online (Sandbox Code Playgroud)

我想在 xml 中序列化它,所以它看起来像这样

<scriptExecutionStatistics start="17.08.2015 18:17:00" end="17.08.2015 18:18:00" />
Run Code Online (Sandbox Code Playgroud)

我知道如果我想将 joda 时间与 jaxb 绑定,则需要一个适配器,但令人困惑的是我并没有真正理解它。所以我开始了

public class DateTimeAdapter extends XmlAdapter<ScriptExecutionStatistics, DateTime>{
private static DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");

@Override
public DateTime unmarshal(ScriptExecutionStatistics vt) throws Exception {
    throw new UnsupportedOperationException("Not supported yet.");
}

@Override
public ScriptExecutionStatistics marshal(DateTime bt) throws Exception {
    ScriptExecutionStatistics stats = new ScriptExecutionStatistics();

}

}
Run Code Online (Sandbox Code Playgroud)

你能帮我完成它吗?提前致谢

Ily*_*lya 6

DateTimeAdapter应该编组/取消编组DateTime到/来自String例如

public class DateTimeAdapter extends XmlAdapter<String, DateTime>{
   private static DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");

   @Override
   public DateTime unmarshal(String vt) throws Exception {
       return dtf.parseDateTime(vt);
   }

   @Override
   public String marshal(DateTime bt) throws Exception {
       return dtf.print(bt);

   }
}
Run Code Online (Sandbox Code Playgroud)

此外,您还应该使用注释 ScriptExecutionStatistics来注释适当的字段/获取器@XmlJavaTypeAdapter

@XmlJavaTypeAdapter(DateTimeAdapter.class)
@XmlAttribute
public DateTime getStart() {
    return start;
}
Run Code Online (Sandbox Code Playgroud)