当JAX库添加到项目时,Hibernate会死掉

时间:2011-03-03 19:38:48

标签: java web-services hibernate jax-ws nullpointerexception

请耐心等待我,我来自.net并且是java世界的新手。

我有一个使用hibernate作为DAL的Spring MVC 3网站。我正在尝试向项目添加Web服务包。

这是问题所在。只要我想补充核心和JAXB JAX-RS库,我的解决方案(即使我的库添加REST-JAX方法,我的服务项目类),休眠整个项目停止工作(包括我的网站)。查询DB(findbyblah())的任何hibernate调用都会抛出NullPointerException。当我删除这两个核心库,清理和重建时,我的网站又开始工作了。

我只需要能够从我的网站实现一些服务方法。有人能指出我正确的方向吗?谢谢。

更新:这是stacktrace:

java.lang.NullPointerException
    com.myeclipse.hibernate.ServicetypeDAO.findAll(ServicetypeDAO.java:100)
    com.indixium.models.RegistrationModel.<init>(RegistrationModel.java:27)
    com.indixium.controllers.RegisterController.get(RegisterController.java:29)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

再次更新

所以我发现两篇看起来很有希望的文章:

http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html

描述了hibernate和jersey都使用asm.jar,但是版本不同,这就是存在冲突行为的原因。它说,为了解决这个问题:

  

要解决此冲突,请使用cglib-nodep.jar而不是cglib.jar,并使用Jersey保留ASM版本3.x. cglib-nodep.jar包含cglib.jar要求的一些ASM类,更改包名称以避免任何类冲突。

不幸的是,我不知道如何为每个库“使用”不同的jar。对此有任何帮助表示赞赏。

我找到的第二个解决方案是修改pom.xml文件(我也不知道该怎么做)。我搜索了我的项目和我的整个硬盘驱动器,找到了一个名为pom.xml的文件而没有运气。如何更改pom.xml?以下是第二个解决方案的链接:

http://blog.idm.fr/2009/04/jersey-hibernate-conflict.html

如果有人可以帮助我实施其中任何一项,我们将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

我首先看一下导致NPE的(ServicetypeDAO.java:100)处的代码,但奇怪的是,只包含一个库可能会破坏应用程序。

如果您还没有pom.xml,那么我假设您使用的是IDE。 pom.xml 是一个maven项目文件,用于维护项目的配置,并由maven用于构建/运行测试/打包/部署项目。

我将从第一个原则开始,自己编写POM并使用maven为IDE生成项目设置。从IDE生成POM通常会导致过于复杂的POM,但自己动手可以更好地控制项目所需的人工制品。然后,您还可以通过从命令行构建/部署来调查问题,从而使IDE脱离等式。

在POM中,您可以指定项目所需的JAR文件版本,在您的情况下,这些版本是未包含依赖项的版本。

答案 1 :(得分:0)

结束废弃JAX-RS方法。我现在使用内置的Spring MVC 3 @RequestBody属性在我的站点中创建服务。

@RequestBody导致Web方法直接写入输出流,而不是要解析的路由引擎并将其传递给视图字典。

我创建了一个专用于我的服务的控制器,并将其归因于@RequestMapping(“/ services”)。此控制器中的所有Web方法都使用@RequestBody进行修饰,以便可以返回直接数据输出。