2011-09-27 6 views
6

Mam problem z wykorzystaniem JAXB. Moje klasy Java zostały utworzone za pośrednictwem xjc (przy użyciu schematu xsd) i ma globalne powiązanie dla danych XML-Datatypes xs: date xs: dateTime i xs: time do java.util.Calendar z analizą składni i metodą drukowania.Java: JAXB: Marshelling z JAXBElement <Calendar> do xs: date not correct

Wszystko działa poprawnie, dopóki nie zaznaczyłem niektórych pól xs: data jako niepłatnych. Xjc tworzy wrappery JAXBElement dla tych właściwości. Jeśli te pola zostaną utracone, wydrukowana zostanie data, w tym informacja o czasie, która prowadzi do błędów sprawdzania poprawności.

Czy istnieje możliwość zmuszenia Marshalla do przekonwertowania go na xs: date zamiast xs: dateTime?

Czy mogę określić powiązanie dla tych pól, które otrzymują specjalną XMLAdapater ewhich konwertującą te pola?

Obiekt wewnątrz Java Klasy wygląda tak:

@XmlElementRef(name = "dateField", namespace = "namespace", type = JAXBElement.class) 

protected JAXBElement<Calendar> dateField; 

oraz odpowiadające im xsd-wygląda jak

<xs:element name="dateField" minOccurs="0" nillable="true" type="xs:date" /> 

Czy ktoś może mi pomóc proszę?

Dzięki i pozdrawiam,

Arne

+0

Czy na pewno chcesz "nillable =" true "" w pierwszej kolejności? Czy nie możesz zamiast tego użyć elementu opcjonalnego? Nigdy nie widziałem takiej potrzeby ani nie czułem, że tęskniłem za tym. –

Odpowiedz

1

Czy naprawdę trzeba mapować kalendarz wewnątrz JAXBElement ?, nie byłoby poprawne użycie spuściznę XMLGregorianCalendar zamiast (i wtedy można przekonwertować go do randka)?