У меня есть класс, который имеет JAXB и аннотации проверки bean-компонентов, очень похожие на следующие:
@XmlType(namespace = "urn:com:company:assessment")
@XmlRootElement
public class Assessment
{
// ...
@NotNull
@Size(min = 1,
message = "Assessment requires at least one address.")
@Valid
@XmlJavaTypeAdapter(AddressesAdapter.class)
public synchronized Set<Address> getAddresses()
{
return this.addresses;
}
// ...
}
Джерси выполняет маршалинг этого класса и демаршалирование из XML просто отлично; Тем не менее, Джерси не может правильно отменить сортировку из JSON. Я установил точки останова в классе AddressesAdapter
и заметил, что метод unmarshal()
никогда не вызывается при десериализации JSON.
Несмотря на то, что при настройке Джерси с использованием естественной нотации или иным образом, если я создаю @XmlAnyElement
-аннотированное свойство, я получаю addresses
элементов, которые должны были быть распакованы с помощью адаптера.
Если я использую Джексона напрямую и регистрирую его JacksonJaxbJsonProvider
провайдера, я получаю исключения при попытке демонтажа из JSON:
Nov 2, 2011 10:07:41 AM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: A message body reader for Java class com.company.Assessment, and Java type class com.company.Assessment, and MIME media type application/json was not found
Nov 2, 2011 10:07:41 AM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
(JacksonJaxbJsonProvider
не указан.)
Кто-нибудь имеет представление о том, как я могу упорядочить свои аннотированные JAXB классы как XML, так и JSON без необходимости создания MessageBodyReader
s и MessageBodyWriter
s?
Заранее спасибо!