将Java Date对象映射到XML Schema日期时间格式
我在将Java数据类型映射到标准Schema Date数据类型时遇到了一些问题。
我有一个简单的类,我这样注释。 period实例变量是Java Date对象类型。
@XmlAccessorType(value = XmlAccessType.NONE) public class Chart { @XmlElement private double amount; @XmlElement private double amountDue; @XmlElement private Date period; //constructor getters and setters }
这是我的Web服务
@WebService public class ChartFacade { @WebMethod public Chart getChart() throws ParseException { SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd"); Chart chart = new Chart(20.0,20.5, df.parse("2001-01-01")); return chart; } }
我的问题是它以不符合我期望的格式返回日期数据。
20.0 20.5 **2001-01-01T00:01:00+08:00**
我希望像这样返回句点元素
2001-01-01
有什么办法可以实现吗?
您可以执行以下操作来控制架构类型:
@XmlElement @XmlSchemaType(name="date") private Date period;
欲获得更多信息:
使用@XmlJavaTypeAdapter注释,您可以以任何方式编组/解组您的字段。
不知道它是否是最简单的方法。
另请注意,它可能会损害与尝试使用您的WSDL的任何代码的互操作性。 其他代码的程序员会将xsd:string视为字段类型,因此必须手动进行格式化和解析(就像你一样,是的),介绍谁知道有多少错误。 所以请考虑一下xsd:date是不是一个糟糕的选择。
从这里偷来的 :
@XmlJavaTypeAdapter(value=DateAdapter.class, type=Date.class) Date someDate; ... public class DateAdapter extends XmlAdapter { // the desired format private String pattern = "MM/dd/yyyy"; public String marshal(Date date) throws Exception { return new SimpleDateFormat(pattern).format(date); } public Date unmarshal(String dateString) throws Exception { return new SimpleDateFormat(pattern).parse(dateString); } }
更新 :正如@Blaise Doughan所提到的,更简短的方法是用日期注释日期
@XmlSchemaType("date") Date someDate;
尽管仍然不清楚为什么没有为日期生成时区信息,但这段代码在实践中起作用并且需要更少的输入。
您的Chart
构造函数似乎正在将格式化的日期字符串解析回Date
,然后使用默认格式将其序列化为XML响应。 我想使用private String period;
(并修复构造函数)应该工作