我正在处理提到的球衣服务,当我返回java对象时,它工作正常。后来我试图使java对象成为通用对象
javax.ws.rs.WebApplicationException:javax.xml.bind.MarshalException

@XmlRootElement
public class AppObject<T> implements Serializable {

    private List<T> list;
    private String license;

    public AppObject() {
        list = new ArrayList<T>();

    }

    public AppObject(List<T> list) {
        this.list = list;
    }

    @XmlAnyElement(lax = true)
    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public String getLicense() {
        return license;
    }

    public void setLicense(String license) {
        this.license = license;
    }

}


我的服务

@GET
    @Produces({MediaType.APPLICATION_XML ,MediaType.APPLICATION_JSON})
    @Path("/getreq")
    public  AppObject<DimRequirement> savePayment() {
        AppObject<DimRequirement> appObject = new AppObject<DimRequirement>();
        appObject.setLicense("4");
        Long clientKey=4L;
        List<DimRequirement> dimreqlist = dimRequirementDao.getAllByClientNIsCurrent(clientKey);
        appObject.setList(dimreqlist);
        return appObject;

    }


设置为AppObject的DimRequirement

@XmlRootElement
public class DimRequirement extends BaseObject implements Serializable {
private Long requirementKey;
private String description;
private String priority;
@Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="requirementKey")
    public Long getRequirementKey() {
        return this.requirementKey;
    }
    public void setRequirementKey(Long requirementKey) {
        this.requirementKey = requirementKey;
    }
 @Column(name="Description")
    public String getDescription() {
        return this.description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
 @Column(name="Priority")
    public String getPriority() {
        return this.priority;
    }
    public void setPriority(String priority) {
        this.priority = priority;
    }
}


堆栈跟踪

SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.SAXException2: class com.vxl.model.DimRequirement nor any of its super class is known to this context.
javax.xml.bind.JAXBException: class com.vxl.model.DimRequirement nor any of its super class is known to this context.]
    at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(AbstractRootElementProvider.java:159)
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1437)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)


我引用了以下链接
here
link 1
但我无法解决问题。

最佳答案

对于您的get方法,相应的JAXBContext将建立在类AppObject上,而不是类型AppObject<DimRequirement>

@GET
@Produces({MediaType.APPLICATION_XML ,MediaType.APPLICATION_JSON})
@Path("/getreq")
public  AppObject<DimRequirement> savePayment() {


您可以使用JAXBContext注释使将在AppObject类上创建的DimRequirement意识到@XmlSeeAlso

@XmlRootElement
@XmlSeeAlso({DimRequirement.class})
public class AppObject<T> implements Serializable {

10-07 17:00