【发布时间】:2011-12-20 10:07:07
【问题描述】:
我有一个具有 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;
}
// ...
}
Jersey 将此类编组到 XML 并从 XML 中解组就可以了;但是,Jersey 无法正确解组 JSON。我在 AddressesAdapter 类中设置了断点,并注意到在反序列化 JSON 时永远不会调用 unmarshal() 方法。
不管是否使用自然表示法配置 Jersey,如果我创建一个 @XmlAnyElement-annotated 属性,我会得到应该使用适配器解组的 addresses 元素。
如果我直接使用 Jackson 并注册其 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,而无需创建 MessageBodyReaders 和 MessageBodyWriters?
提前致谢!
【问题讨论】:
标签: java json jaxb jersey jackson