NullPointerException in HibernateDaoSupport.getSession()

浪子不回头ぞ 提交于 2019-12-25 07:15:19

问题


I'm using Wicket-1.5.x, Spring-3.2, and Hibernate-3.6. My application successfully starts and reads from the database, however when I try to actually load a page I get the exception pasted below.

Why can't it find the session? From what I can tell its not even the dreaded LazyLoadInitializationException so I'm not even sure where to begin, I'm not sure its gotten far enough in the page render process to tell whether or not if OpenSessionInViewFilter would even have helped.

org.apache.wicket.WicketRuntimeException: Exception in rendering component: [TooltipContainer [Component id = firstNameTip]]
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2590)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1530)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1428)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1592)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1567)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1521)
    at org.apache.wicket.markup.html.form.Form.onComponentTagBody(Form.java:1656)
    at org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy.onComponentTagBody(DefaultMarkupSourcingStrategy.java:72)
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2563)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1530)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1428)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1592)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1567)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1521)
    at org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy.onComponentTagBody(DefaultMarkupSourcingStrategy.java:72)
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2563)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1530)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1428)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1592)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1567)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1521)
    at org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy.onComponentTagBody(DefaultMarkupSourcingStrategy.java:72)
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2563)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1530)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1428)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1592)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1567)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1521)
    at org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy.onComponentTagBody(DefaultMarkupSourcingStrategy.java:72)
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2563)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1530)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1428)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1592)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1567)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1521)
    at org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy.onComponentTagBody(DefaultMarkupSourcingStrategy.java:72)
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2563)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1530)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1428)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1592)
    at org.apache.wicket.Page.onRender(Page.java:907)
    at org.apache.wicket.markup.html.WebPage.onRender(WebPage.java:140)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.Page.renderPage(Page.java:1035)
    at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:118)
    at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:246)
    at org.apache.wicket.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:167)
    at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:784)
    at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
    at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:255)
    at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:212)
    at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:283)
    at org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:696)
    at org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:624)
    at org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:596)
    at org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:1257)
    at org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:1230)
    at us.ak.state.revenue.cssd.Personnel.Pages.MaintenanceForms.Employee.TestChangeRequestMaintenance.__CLR3_1_11lo23k3ciu(TestChangeRequestMaintenance.java:52)
    at us.ak.state.revenue.cssd.Personnel.Pages.MaintenanceForms.Employee.TestChangeRequestMaintenance.testLoadPageLoggedIn_DO(TestChangeRequestMaintenance.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.RuntimeException: An error occurred while getting the model object for Component: [TextField [Component id = firstName, page = us.ak.state.revenue.cssd.Personnel.Pages.MaintenanceForms.Employee.ChangeRequestMaint, path = 0:emp_info_maint:firstNameTip:firstName.TextField, isVisible = true, isVersioned = false, markup = [markup = file:/C:/Users/tfburton/Documents/JavaProjects/SVN/Personnel/trunk/target/classes/us/ak/state/revenue/cssd/Personnel/Pages/MaintenanceForms/Employee/ChangeRequestMaint.html
<input wicket:id="firstName" type="text" class="noChange"/>, index = 0, current =  '<input wicket:id="firstName" type="text" class="noChange"/>' (line 0, column 0)]]]
    at org.apache.wicket.Component.getDefaultModelObject(Component.java:1679)
    at org.apache.wicket.Component.getDefaultModelObjectAsString(Component.java:1701)
    at org.apache.wicket.markup.html.form.FormComponent.getModelValue(FormComponent.java:1211)
    at org.apache.wicket.markup.html.form.FormComponent.getValue(FormComponent.java:837)
    at org.apache.wicket.markup.html.form.TextField.onComponentTag(TextField.java:108)
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2534)
    at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1530)
    at org.apache.wicket.Component.internalRender(Component.java:2393)
    at org.apache.wicket.Component.render(Component.java:2321)
    at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1428)
    at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1592)
    at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1567)
    at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1521)
    at org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy.onComponentTagBody(DefaultMarkupSourcingStrategy.java:72)
    at org.apache.wicket.Component.internalRenderComponent(Component.java:2563)
    ... 104 more
Caused by: org.apache.wicket.WicketRuntimeException: Error calling method: public java.lang.String us.ak.state.revenue.cssd.Personnel.dao.Employee.Employee.getFirstName() on object: null
    at org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.getValue(PropertyResolver.java:1127)
    at org.apache.wicket.util.lang.PropertyResolver$ObjectAndGetSetter.getValue(PropertyResolver.java:648)
    at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:102)
    at org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:134)
    at org.apache.wicket.Component.getDefaultModelObject(Component.java:1674)
    ... 118 more
Caused by: java.lang.NullPointerException
    at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:143)
    at us.ak.state.revenue.cssd.Personnel.dao.NameTableHome.findByPcn(NameTableHome.java:555)
    at WICKET_us.ak.state.revenue.cssd.Personnel.dao.NameTableHome$$FastClassByCGLIB$$bd58bb2e.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.apache.wicket.proxy.LazyInitProxyFactory$CGLibInterceptor.intercept(LazyInitProxyFactory.java:333)
    at WICKET_us.ak.state.revenue.cssd.Personnel.dao.NameTableHome$$EnhancerByCGLIB$$e12a569d.findByPcn(<generated>)
    at us.ak.state.revenue.cssd.Personnel.dao.PcnTable.getNameTable(PcnTable.java:198)
    at us.ak.state.revenue.cssd.Personnel.dao.Employee.Employee.getNameTable(Employee.java:697)
    at us.ak.state.revenue.cssd.Personnel.dao.Employee.Employee.getFirstName(Employee.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.getValue(PropertyResolver

UPDATE

My Test Classes extend the following class:

@ContextConfiguration(locations = { "classpath:testApplicationContext.xml" })
@TransactionConfiguration(transactionManager = "txManager")
@RunWith(SpringJUnit4ClassRunner.class)
public abstract class AbstractWebPageTests implements ApplicationContextAware

I'm using annotations to wire up my Test classes. But I'm trying to stick to using XML as much as possible to wire-up my actual Web Application which gets loaded via new WicketTester(new MockLoggedInApplication(user)); at the beginning of my tests. MockLoggedInApplication extends QuickstartApplication and my application does a lot of database reads inside of QuickStartApplication.init().

should I paste my applicationContext.xml?

NOTE:

I think I've narrowed down the problem.

If you look closely at the bottom Caused By:

Caused by: java.lang.NullPointerException
    at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:143)
    at us.ak.state.revenue.cssd.Personnel.dao.NameTableHome.findByPcn(NameTableHome.java:555)
    at WICKET_us.ak.state.revenue.cssd.Personnel.dao.NameTableHome$$FastClassByCGLIB$$bd58bb2e.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.apache.wicket.proxy.LazyInitProxyFactory$CGLibInterceptor.intercept(LazyInitProxyFactory.java:333)
    at WICKET_us.ak.state.revenue.cssd.Personnel.dao.NameTableHome$$EnhancerByCGLIB$$e12a569d.findByPcn(<generated>)
    at us.ak.state.revenue.cssd.Personnel.dao.PcnTable.getNameTable(PcnTable.java:198)
    at us.ak.state.revenue.cssd.Personnel.dao.Employee.Employee.getNameTable(Employee.java:697)
    at us.ak.state.revenue.cssd.Personnel.dao.Employee.Employee.getFirstName(Employee.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.getValue(PropertyResolver

My DAO is processed by my Wicket proxy WICKET_us.ak.state.revenue.cssd.Personnel.dao.NameTableHome$$FastClassByCGLIB$$bd58bb2e.invoke(<generated>). However, even though wicket proxies it for me it never appears to get grabbed by Springs Transaction Management.

My Transaction Management config:

<bean id="sessionFactory"
      class="us.ak.state.revenue.cssd.Personnel.utils.SessionFactoryBean" >
  <property name="configLocation" value="classpath:hibernate.cfg.xml">
  </property>
</bean>

<bean id="txManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
    <ref bean="sessionFactory" />
  </property>
</bean>

<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
      <tx:method name="find*"     propagation="REQUIRED"/>
      <!-- others omitted for brevity -->
    </tx:attributes>
</tx:advice>

<aop:config proxy-target-class="true" >
     <aop:advisor advice-ref="txAdvice"
          pointcut="execution(* *..BaseHibernateDAO+.find*(..))" />
     <!-- omitted for brevity -->
</aop:config> 

<bean id="NameTableHome"
      class="us.ak.state.revenue.cssd.Personnel.dao.NameTableHome" >
  <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- other dao beans omitted for brevity -->

NameTableHome is declared similar to this:

public class NameTableHome extends BaseHibernateDAO

回答1:


Based upon the code at HibernateDaoSupport:143 (at least in my version, spring-orm 3.2.2) I suspect the field hibernateTemplate of HibernateDaoSupport is null. Are you sure the template is being set properly?



来源:https://stackoverflow.com/questions/16907454/nullpointerexception-in-hibernatedaosupport-getsession

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!