[英]Mapping Java Date Object to XML Schema datetime format
我在將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;
}
}
我的問題是它以不符合我期望的格式返回日期數據。
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getChartResponse xmlns:ns2="http://ss.ugbu.oracle.com/">
<return>
<amount>20.0</amount>
<amountDue>20.5</amountDue>
**<period>2001-01-01T00:01:00+08:00</period>**
</return>
</ns2:getChartResponse>
</S:Body>
</S:Envelope>
我希望像這樣返回句點元素
<period>2001-01-01</period>
有什么辦法可以實現嗎?
您可以執行以下操作來控制架構類型:
@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<String, Date> {
// 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;
(並修復構造函數)應該工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.