Как Заполнить XMLGregorianCalendar()
мне нужно заполнить Jax Bean из XML, однако нет метода 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);
}
}
сеттер в Бобе ниже
public void setDeliveryDate(XMLGregorianCalendar value) {
this.deliveryDate = value;
}
2 ответов
ваш пример кода показывает, что вы пытаетесь заполнить его объектом Date, в то время как сам вопрос говорит, что вы пытаетесь заполнить из XML. Поэтому, если я не ошибаюсь, для заполнения из XML просто используйте:
XmlGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(yourXmlDateTimeString);
Я бы предложил использовать время Joda -- Api даты Java расстраивает многих разработчиков. Если вы хотите придерживаться основных библиотек, попробуйте использовать 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;
}