我有一个具有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解组就好了;但是,泽西岛无法正确地从JSON解组。我在AddressesAdapter
类中设置了断点,并注意到在反序列化JSON时从不调用unmarshal()
方法。
尽管使用自然符号或其他方式配置Jersey,如果我创建了一个@XmlAnyElement
- 带注释的属性,我会获得应该使用适配器解组的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
未列出。)
有没有人知道如何在不必创建MessageBodyReader
和MessageBodyWriter
s的情况下将我的JAXB注释类编组为XML和JSON?
提前致谢!
答案 0 :(得分:0)
将jersey-json添加到项目依赖项中。
答案 1 :(得分:0)
我想你可能偶然发现了和昨天一样的问题。我对Jersey文档感到困惑,并不理解所需的所有要求。
我创建了一个小型的Jersey客户端,它从Rails服务器获取JSON资源并将其解组为POJO,但我昨天无法工作,但今天我成功了!
首先,Jersey要求文档中缺少一个jar,Jackson XML Compability jar以及文档令人困惑。我在http://java.net/jira/browse/JERSEY-803
上写了一篇小报告确保在运行程序时有以下jar:
您还需要JAXB 2.x支持,但这是Java SE 6的一部分。
让我知道这是否适合您,如果不是,我可以发布我的JSON客户端代码。