8

XMLからJAXBeanを設定する必要がありますが、setterメソッドがありません。以下のメッセージが表示されます

 Failed to invoke public javax.xml.datatype.XMLGregorianCalendar() with no args

日付を取得してXMLGregorianCalendarに変換し、ラッパークラスでセッターを呼び出すために、次のメソッドを作成しました。ただし、それでも例外が発生します。私が見落としているこのデータ型を処理する標準的な方法はありますか?ラッパークラスがそれを呼び出していない可能性がありますが、Netbeansでは何らかの理由でデバッガをアタッチできません。

public XMLGregorianCalendar asXMLGregorianCalendar(java.util.Date date) throws DatatypeConfigurationException {
    DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
    if (date == null) {
        return null;
    } else {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(date.getTime());
        return datatypeFactory.newXMLGregorianCalendar(gc);
    }
}

Beanのセッターは以下のとおりです

public void setDeliveryDate(XMLGregorianCalendar value) {
    this.deliveryDate = value;
}
4

2 に答える 2

12

サンプルコードは、Dateオブジェクトを入力しようとしていることを示していますが、質問自体はXMLから入力しようとしていることを示しています。したがって、誤解しない限り、XMLからデータを入力するには次のように使用します。

XmlGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(yourXmlDateTimeString);
于 2012-06-25T16:27:48.237 に答える
1

JodaTimeを使用することをお勧めします-JavaDateApiは、多くの開発者を苛立たせます。コアライブラリを使い続けたい場合は、DataTypeFactoryを使用してみてください。

public static XMLGregorianCalendar asXMLGregorianCalendar(Date date) {
    java.util.GregorianCalendar calDate = new java.util.GregorianCalendar();        
    calDate.setTime(date);
    javax.xml.datatype.XMLGregorianCalendar calendar = null;
        try {
            javax.xml.datatype.DatatypeFactory factory = javax.xml.datatype.DatatypeFactory.newInstance();
            calendar = factory.newXMLGregorianCalendar(
            calDate.get(java.util.GregorianCalendar.YEAR),
            calDate.get(java.util.GregorianCalendar.MONTH) + 1,
            calDate.get(java.util.GregorianCalendar.DAY_OF_MONTH),
            calDate.get(java.util.GregorianCalendar.HOUR_OF_DAY),
            calDate.get(java.util.GregorianCalendar.MINUTE),
            calDate.get(java.util.GregorianCalendar.SECOND),
            calDate.get(java.util.GregorianCalendar.MILLISECOND), 0);
        } catch (DatatypeConfigurationException dce) {
            //handle or throw
        }   
    return calendar;
}
于 2012-06-25T14:45:44.570 に答える