«JAXBException: класс org.example.entity.Foo, ни какой-либо из его суперкласса не известен этому контексту».когда объект находится во внешнем .jar - PullRequest
2 голосов
/ 02 ноября 2010

У меня проблема при попытке вернуть объект, определенный во внешнем .jar, из веб-службы Java EE 6.

Веб-служба выглядит следующим образом:

@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;
    }
}

Когда я определяю класс «Foo» в том же файле .jar, что и веб-сервис, все работает нормально.Тем не менее, я хотел бы определить «Foo» в своем собственном .jar, так как «Foo» также является компонентом JPA, и поскольку различные компоненты приложения (упакованные как .ear) должны иметь возможность доступа к «Foo».обойти эту ошибку?«Foo» - это стандартный компонент JPA с аннотацией «@XmlRootElement».

1 Ответ

0 голосов
/ 20 февраля 2013

Если у вас есть внешние jar с объектами @Entity, то добавьте <jar-file>relative/path/to/your/external.jar</jar-file> в ваш файл persistence.xml.

Это не требуется для объектов @MappedSuperclass во внешних банках.

Дополнительная информацияв этом ответе: Совместное использование единицы персистентности между компонентами в файле .ear

Также взгляните на использование внешнего jar с @MappedSuperclass и внедрением @PersistenceContext на Github .

...