【发布时间】:2010-12-01 22:08:34
【问题描述】:
在我的 JAX-RS 项目 (Jersey) 中,我在将 JAXB 注释对象之一编组为 JSON 时遇到问题。这是我在日志中看到的错误消息:
严重:内部服务器错误 javax.ws.rs.WebApplicationException: javax.xml.bind.JAXBException: class com.dnb.applications.webservice.mobile.view.CompaniesAndLocations 及其任何超类对此上下文都是未知的。
这是否指向任何具体问题?我的资源有这样的方法:
@Path("/name/{companyname}/location/{location}")
@Produces("application/json; charset=UTF-8;")
@Consumes("application/json")
@POST
public Viewable findCompanyByCompanyNameAndLocationAsJSON(@PathParam("companyname") String companyName,
@PathParam("location") String location, CriteriaView criteria) {
criteria = criteria != null ? criteria : new CriteriaView();
criteria.getKeywords().setCompanyName(companyName);
return getCompanyListsHandler().listsByCompanyNameAndLocation(criteria, location);
}
Viewable 是一个空接口。上述方法返回一个CompaniesAndLocations类型的对象,定义如下:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "companiesAndLocations", propOrder = { "count", "normalizedLocations", "companyList", "companyMap", "modifiers",
"modifiersMap", "companyCount", "navigators" })
public class CompaniesAndLocations extends BaseCompanies implements Viewable {
@XmlElement(name = "normalizedLocations", required = false)
protected List<NormalizedLocation> normalizedLocations;
public List<NormalizedLocation> getNormalizedLocations() {
if (normalizedLocations == null) {
normalizedLocations = new ArrayList<NormalizedLocation>();
}
return normalizedLocations;
}
}
BaseCompanies 定义了许多其他字段:
@XmlTransient
public abstract class BaseCompanies {
@XmlElement(name = "modifiers", required = false)
private List<Modifiers> modifiers;
....
我应该补充一点,我与应用程序中其他工作代码使用的方法略有不同。其他资源方法从带有 @XmlRegistry 注释的 ObjectFactory 中获取它们的对象。不过,我认为这没有必要。我见过其他代码直接实例化 JAXB 注释的 POJO,而不使用 ObjectFactory 工厂。
有什么想法吗?
【问题讨论】: