簡體   English   中英

將Java Date對象映射到XML Schema日期時間格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM