2011-03-03 28 views
0

請耐心等待,我來自.net,並且是Java世界的新手。當JAX庫添加到項目中時,Hibernate會死亡

我有一個使用休眠作爲DAL的Spring MVC 3網站。我正在嘗試爲該項目添加一個Web服務包。

這是問題所在。只要我將核心和jaxb JAX-RS庫添加到我的解決方案(使我能夠將REST-JAX方法添加到我的服務項目類中的庫),hibernate停止在整個項目(包括我的網站)上工作。任何查詢數據庫的hibernate調用(findbyblah())都會拋出NullPointerException異常。當我刪除這兩個核心庫時,清理和重建,我的網站再次開始工作。

我只需要能夠從我的網站實施一些服務方法。有人能指引我朝着正確的方向嗎?謝謝。

更新:這裏是堆棧跟蹤:

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

描述了休眠和球衣都使用asm.jar,但是d不同版本,這就是衝突行爲存在的原因。它說,爲了解決這個問題:

爲了解決這個衝突使用CGLIB的nodep.jar代替cglib.jar並保持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

如果有人能幫助我實現其中任意一個,這將是大加讚賞。謝謝。

+0

請對這些JAX庫進行更具體的說明。你在談論JAX-RS嗎?你正在使用哪個實現?什麼是NPE的堆棧跟蹤? – FelixM

+0

是的,JAX-RS(Core和JAXB v.1.0.3.1)。這裏是堆棧跟蹤..(太長的評論,我會更新我的問題) – kmehta

回答

0

結束了對JAX-RS方法的報廢。我現在使用內置的Spring MVC 3 @RequestBody屬性在我的站點內創建一個服務。

@RequestBody使Web方法直接寫入輸出流,而不是將路由引擎解析並傳遞給視圖字典。

我創建了一個專用於我的服務的控制器,並將其歸入@RequestMapping(「/ services」)。此控制器中的所有Web方法均使用@RequestBody裝飾,以便可以返回直接數據輸出。

0

我會先看看導致NPE的代碼(ServicetypeDAO.java:100)開始,但奇怪的是,只包含一個庫可能會破壞應用程序。

如果您還沒有pom.xml,那麼我假設您使用的是IDE。 pom.xml是一個maven項目文件,用於維護一個項目的配置,並被maven用來構建/運行tests/package/deploy你的項目。

我會從第一原則開始,自己編寫POM並使用maven爲您的IDE生成項目設置。從IDE生成POM通常會導致過於複雜的POM,但自己動手可以更好地控制項目所需的人工製品。在通過從命令行構建/部署來調查問題時,您也可以將IDE從等式中排除。

在POM中,您可以指定項目需要哪些版本的JAR文件,在您的情況下是未包含在依賴項中的版本。