我使用JAXB从xsd模式生成java模式对象。
我要做的是使用java模式对象setter方法设置xml标记的值,然后编组java对象。在生成的最终xml上,我看到为xs:datetime类型生成的时间戳没有毫秒。
我期待看到像“2013-06-28T01:20:50。 000 -04:00”这样的日期,我得到的只是“2013-06-28T01: 20:50-04:00“没有毫秒。
拨打电话
obj.setTransactionDateTime(getTimestamp(“2013-06-28 01:20:50”));
getTimestamp方法
public Calendar getTimestamp(String dateStr)
{
Date returnDate = null;
if(dateStr == null)
{
return null;
}
try
{
SimpleDateFormat srcFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = srcFormatter.parse(dateStr);
SimpleDateFormat destFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
returnDate = destFormatter.parse(destFormatter.format(date));
}
catch (ParseException e)
{
dbacc.logError("Error while parsing date string" + e.getMessage());
}
Calendar cal = Calendar.getInstance();
cal.setTime(returnDate);
return cal;
}
对日期时间类型的绑定定义如下......
<jxb:javaType name="java.util.Calendar" xmlType="xsd:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
不确定代码有什么问题。非常感谢任何帮助。
答案 0 :(得分:2)
当编组java.util.Date
JAXB实现时,如果它们不是0
,则会封送它们。
Java模型(根)
import java.util.Date;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propOrder = { "foo", "bar" })
public class Root {
private Date foo;
private Date bar;
public Date getFoo() {
return foo;
}
public void setFoo(Date foo) {
this.foo = foo;
}
public Date getBar() {
return bar;
}
public void setBar(Date bar) {
this.bar = bar;
}
}
<强>演示强>
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.setFoo(DatatypeConverter.parseDateTime("2013-08-02T11:50:00-04:00").getTime());
root.setBar(DatatypeConverter.parseDateTime("2013-08-02T11:50:00.123-04:00").getTime());
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
<强>输出强>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<foo>2013-08-02T11:50:00-04:00</foo>
<bar>2013-08-02T11:50:00.123-04:00</bar>
</root>
XmlAdapter
您可以创建XmlAdapter
来控制java.util.Date
编组的方式:
XmlAdapter
下面是我给出的答案的链接,演示了如何在从XML架构生成模型时利用XmlAdapter
。