尝试从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。
答案 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。