2012-04-18 1 views
1

Heyho,package-info.class content in jaxb context

У меня возникли проблемы с процессом сериализации JAXB. jaxb version 2, используемый для свойств сериализации.

Можно ли добавить несколько аннотаций уровня пакета в «package-info.class»? В настоящее время я создаю этот файл вручную, в нем уже есть одна запись «адаптер», и он должен оставаться там. Хотя я ищу, как идиот, каждый пример имеет только один номер, но я думаю, это просто невозможно, потому что семантика должна быть более гибкой, позволяя несколько аннотаций уровня пакета, чем один.

Проблема заключается в том, что я использую @XmlJavaTypeAdapter (AdapterForMap.class) для каждого члена карты в классе, но на самом деле карта содержит другой тип (как значение), скажем, Font, который должен иметь соответствующий xml-адаптер. На данный момент я не могу использовать этот Font-Adapter-like, потому что «package-info.class» уже имеет одну запись.

благодарит заранее! :)

+1

ли вы попробовать @XmlJavaTypeAdapters? http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/adapters/XmlJavaTypeAdapters.html – Puce

+0

Да. В настоящее время я использую подход Блейз Доуэн, чтобы указать несколько адаптеров в пакете-info.class, теперь это работает отлично. Проблема возникает, когда у меня есть сложная структура, такая как Map thens

ответ

3

@XmlJavaTypeAdapters может использоваться на уровне упаковки для регистрации множества экземпляров @XmlJavaTypeAdapter.

пакет-инфо

@XmlJavaTypeAdapters({ 
    @XmlJavaTypeAdapter(type=DateTime.class, value=DateTimeAdapter.class), 
    @XmlJavaTypeAdapter(type=DateMidnight.class, value=DateMidnightAdapter.class), 
    @XmlJavaTypeAdapter(type=LocalDate.class, value=LocalDateAdapter.class), 
    @XmlJavaTypeAdapter(type=LocalTime.class, value=LocalTimeAdapter.class), 
    @XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeAdapter.class) 
}) 
package blog.jodatime; 

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;  
import org.joda.time.*; 

Полный пример

+1

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