“JAXBException:类org.example.entity.Foo或它的任何超类都是这个上下文所知的。”当对象在外部.jar时

时间:2010-11-01 22:10:10

标签: java web-services java-ee glassfish jax-ws

尝试从Java EE 6 Web服务返回外部.jar中定义的对象时遇到问题。

Web服务如下所示:

@Stateless
@Path("book")
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public class NewWebService {

    @PersistenceContext(unitName = "EnterpriseApplication3-warPU")
    private EntityManager em;

    @GET
    public List<Foo> getBookTitle() {
        Query query = em.createNamedQuery("Foo.findAll");
        List<Foo> foo = query.getResultList();
        return foo;
    }
}

当我在与Web服务相同的.jar文件中定义“Foo”类时,一切正常。但是,我想在它自己的.jar中定义“Foo”,因为“Foo”也是一个JPA bean,并且由于应用程序的不同组件(打包为.ear)需要能够访问“Foo” ”

在另一个.jar文件(即同一个.ear中的包)中定义“Foo”时,Glassfish会返回以下错误消息:

javax.ws.rs.WebApplicationException: javax.xml.bind.JAXBException: class org.example.entity.Foo nor any of its super class is known to this context.

有关如何解决此错误的任何提示? “Foo”是带有“@XmlRootElement”注释的标准JPA bean。

1 个答案:

答案 0 :(得分:0)

如果你有@Entity对象的外部jar,那么将<jar-file>relative/path/to/your/external.jar</jar-file>添加到你的persistence.xml。

外部jar中的@MappedSuperclass对象不需要它。

更多信息在这个答案中: Sharing a persistence unit across components in a .ear file

还要看一下external jar usage with @MappedSuperclass and @PersistenceContext injection on Github