2015-03-02 29 views
0

因此,我将JPA/Hibernate数据访问层添加到我的项目中,该项目的webapp和数据部分在不同的war/jar中分开。尽管如此,webapp确实将数据jar包含为Maven中的依赖项。在JUnit的数据端一切正常,部署给我没有错误,但是当页面加载并且对自动装配的DAO bean的调用正在执行时,我得到一个NullPointerException。@Autowired上的webapp中的空指针

踢球者是,我没有设计webapp部分,但我确实有控制权来修改它以根据需要进行这项工作。我有一种感觉,这与webapp仍然没有看到自动装配的DAO我试图实例化甚至认为数据jar被添加为依赖项。

是否需要将某些内容添加到webapps applicationContext中以同步这些内容?我很新,所以我确信我错过了一些非常明显的东西!我看过类似的问题,但似乎没有任何结果符合我目前的情况。

我的数据的ApplicationContext

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jee="http://www.springframework.org/schema/jee" 
     xmlns:lang="http://www.springframework.org/schema/lang" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
          http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
          http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
          http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 

    <context:annotation-config/> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceXmlLocation" value="classpath:persistence.xml" /> 
     <property name="persistenceUnitName" value="ApplicationEntityManager" /> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 
     <property name="url" value="***" /> 
     <property name="username" value="***" /> 
     <property name="password" value="***" /> 
    </bean> 

    <context:component-scan base-package="...data.dao"/> 
    <context:component-scan base-package="...data.service"/> 

</beans> 

他们的web应用“的applicationContext(分派小服务程序)

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="...web.controllers" /> 

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
     <property name="basename" value="messages"/> 
    </bean> 

    <bean name="/mypractice/*" class="...web.controllers.MyPracticeController">  
    </bean> 

    <bean name="/milestones/*" class="...web.controllers.MilestonesController"> 
    </bean> 

    <bean name="/resources/*" class="...web.controllers.ResourcesController"> 
    </bean> 

    <bean name="/file/*" class="...web.controllers.FilesController"> 
    </bean>  

    <bean id="uploader" class="...web.service.FileUploadRestService"> 
    </bean> 

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" /> 

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> 

    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">  
    </bean> 

    <bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer"> 
    <property name="definitions"> 
     <list> 
     <value>/WEB-INF/tiles.xml</value> 
     </list> 
    </property> 
    </bean> 

    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" /> 

    <mvc:annotation-driven /> 

</beans> 

他们的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 


    <display-name>Webapp</display-name> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
</web-app> 

堆栈跟踪

[3/2/15 13:47:50:981 EST] 0000006e SystemOut  O In myPractice Controller 
[3/2/15 13:47:50:982 EST] 0000006e SystemOut  O About to call findPracticeByPracticeId... 
[3/2/15 13:47:51:004 EST] 0000006e SystemOut  O in my practice controller [[]] 
[3/2/15 13:47:50:982 EST] 0000006e SystemErr  R java.lang.NullPointerException 
[3/2/15 13:47:50:984 EST] 0000006e SystemErr  R at ....web.service.MyPracticeService.retrievPracticeDetails(MyPracticeService.java:51) 
[3/2/15 13:47:50:984 EST] 0000006e SystemErr  R at ....web.controllers.MyPracticeController.practicesList(MyPracticeController.java:42) 
[3/2/15 13:47:50:985 EST] 0000006e SystemErr  R at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[3/2/15 13:47:50:986 EST] 0000006e SystemErr  R at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
[3/2/15 13:47:50:987 EST] 0000006e SystemErr  R at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
[3/2/15 13:47:50:987 EST] 0000006e SystemErr  R at java.lang.reflect.Method.invoke(Method.java:611) 
[3/2/15 13:47:50:988 EST] 0000006e SystemErr  R at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:471) 
[3/2/15 13:47:50:989 EST] 0000006e SystemErr  R at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:408) 
[3/2/15 13:47:50:989 EST] 0000006e SystemErr  R at ....web.common.BaseController.handleRequest(BaseController.java:32) 
[3/2/15 13:47:50:990 EST] 0000006e SystemErr  R at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
[3/2/15 13:47:50:990 EST] 0000006e SystemErr  R at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
[3/2/15 13:47:50:990 EST] 0000006e SystemErr  R at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
[3/2/15 13:47:50:991 EST] 0000006e SystemErr  R at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920) 
[3/2/15 13:47:50:992 EST] 0000006e SystemErr  R at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816) 
[3/2/15 13:47:50:992 EST] 0000006e SystemErr  R at javax.servlet.http.HttpServlet.service(HttpServlet.java:575) 
[3/2/15 13:47:50:993 EST] 0000006e SystemErr  R at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801) 
[3/2/15 13:47:50:994 EST] 0000006e SystemErr  R at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
[3/2/15 13:47:50:994 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230) 
[3/2/15 13:47:50:995 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779) 
[3/2/15 13:47:50:995 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478) 
[3/2/15 13:47:50:996 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
[3/2/15 13:47:50:996 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1071) 
[3/2/15 13:47:50:997 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87) 
[3/2/15 13:47:50:997 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:914) 
[3/2/15 13:47:50:998 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 
[3/2/15 13:47:50:998 EST] 0000006e SystemErr  R at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) 
[3/2/15 13:47:50:999 EST] 0000006e SystemErr  R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:459) 
[3/2/15 13:47:50:999 EST] 0000006e SystemErr  R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:526) 
[3/2/15 13:47:51:000 EST] 0000006e SystemErr  R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:312) 
[3/2/15 13:47:51:000 EST] 0000006e SystemErr  R at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88) 
[3/2/15 13:47:51:001 EST] 0000006e SystemErr  R at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) 
[3/2/15 13:47:51:001 EST] 0000006e SystemErr  R at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
[3/2/15 13:47:51:002 EST] 0000006e SystemErr  R at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
[3/2/15 13:47:51:002 EST] 0000006e SystemErr  R at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
[3/2/15 13:47:51:002 EST] 0000006e SystemErr  R at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
[3/2/15 13:47:51:003 EST] 0000006e SystemErr  R at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
[3/2/15 13:47:51:003 EST] 0000006e SystemErr  R at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
[3/2/15 13:47:51:004 EST] 0000006e SystemErr  R at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1864) 
+0

能否请您发表您的错误的完整堆栈跟踪 – LynAs 2015-03-02 18:04:54

+0

堆栈跟踪添加 – 2015-03-02 18:52:07

回答

0

应用程序启动时没有错误,这意味着没有依赖性的问题。当控制器调用调用autowire变量时,问题在于如何创建该变量。检查构造函数并检查变量autowired类是否被注释。 e.g

@Component 
public class className{} 

@Service 
public class className{} 
+0

我做了一个很好的一些改变,以我的应用程序。一些注释已关闭,我相信它们现在应该是这样。 JUnit测试仍然可以正常工作,但现在它自动装配bean本身的错误,所以我想知道我错过了什么。让我摊开来给你它目前设置方式: – 2015-03-02 23:08:15

+0

复制 - 编辑来 – 2015-03-02 23:08:15

+0

好了,所以我有: 数据区的jar: 实体(@Component) DAO(@Component) DAO接口(没有说明) ServicetoDAO(@Component,@Service和Autowires的DAO接口) ServicetoDAO接口(@Transactional) 应用区战:(包括数据区的jar) ControllerClass(@Controller&autowires的ServicetoDAO接口) – 2015-03-02 23:13:26