JaxB привязка XMLGregorianCalendar - PullRequest
4 голосов
/ 14 июля 2011

JaxB при привязке неправильного формата даты к XMLGregorianCalendar не является исключением. Вместо этого он назначает ноль. В чем может быть проблема?

@XmlAttribute(name = "travelEndDate", required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar travelEndDate;

<xs:complexType name="SearchCriteria">
<xs:attribute name="travelStartDate" type="xs:date" use="required"/>
<xs:attribute name="travelEndDate" type="xs:date" use="required"/>
</xs:complexType>

Ответы [ 3 ]

4 голосов
/ 14 июля 2011

Примечание: Я являюсь лидером EclipseLink JAXB (MOXy) и членом группы экспертов JAXB 2.X ( JSR-222 ) .

Это поведение будет немного различаться в разных реализациях JAXB. Например, MOXy выдаст следующее исключение, если значение неверно:

Exception in thread "main" javax.xml.bind.UnmarshalException
 - with linked exception:
[Exception [EclipseLink-3003] (Eclipse Persistence Services - 2.4.0.qualifier): org.eclipse.persistence.exceptions.ConversionException
Exception Description: Incorrect date format: [2011-02-50] (expected [YYYY-MM-DD])]
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:225)
    at forum254.Demo.main(Demo.java:18)
Caused by: Exception [EclipseLink-3003] (Eclipse Persistence Services - 2.4.0.qualifier): org.eclipse.persistence.exceptions.ConversionException
Exception Description: Incorrect date format: [2011-02-50] (expected [YYYY-MM-DD])
    at org.eclipse.persistence.exceptions.ConversionException.incorrectDateFormat(ConversionException.java:103)
    at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertStringToXMLGregorianCalendar(XMLConversionManager.java:689)
    at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertObjectToXMLGregorianCalendar(XMLConversionManager.java:278)
    at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertObject(XMLConversionManager.java:249)
    at org.eclipse.persistence.oxm.XMLField.convertValueBasedOnSchemaType(XMLField.java:712)

Обход

Чтобы получить сообщение об ошибке в любой реализации JAXB, вы можете установить схему XML на unmarshaller для выполнения проверки:

Или вы можете реализовать XmlAdapter для управления преобразованием (и, при необходимости, выбросить исключение):

1 голос
/ 14 июля 2011

Может быть, эта ссылка полезна для вас:

http://eskatos.wordpress.com/2007/11/24/jaxb-custom-binding-for-joda-time/

В ней описывается обработка дат в XML с помощью пользовательских типов данных Java (здесь: JodaTime)

0 голосов
/ 14 июля 2011

Используйте это, оно поймает исключение:

try {
   String date = "your date here"
   XMLGregorianCalendar xmlGCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(date);
    } catch (DatatypeConfigurationException ex) {
       //DO STUFF
      }

Обновление:

После вашего добавления кода я не уверен, как вы поймаете это.Для этого, я думаю, вам нужно будет сделать нулевую проверку и делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...