spring注入,空指针异常,看了好多帖子忍找不到办法,求大神指点

lilei0303 2014-01-22 02:36:31
以下是我自己做的例子:使用全注解的形式

DAO层:
package Impl.DAOImpl;

import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import DAO.RegionDAO;
import Entity.Region;

@Repository(value="regionDAOimpl")
public class RegionDAOImpl implements RegionDAO {

@Resource
private RegionDAO regionmapper;


public RegionDAO getRegionmapper() {
return regionmapper;
}

/*public void setRegionmapper(RegionDAO regionmapper) {
this.regionmapper = regionmapper;
}*/

public Region selectRegion(int code) {
return regionmapper.selectRegion(code);
}

public int updateRegion(int code) {
return regionmapper.updateRegion(code);
}

public void deleteRegion(int code) {
regionmapper.deleteRegion(code);
}

public int insertRegion(Region region) {
return regionmapper.insertRegion(region);
}

public void test2() {
System.out.println("test2");
}

}


Service层:

package Impl.ServiceImpl;

import java.net.URI;
import javax.annotation.Resource;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.xml.bind.JAXBElement;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import DAO.RegionDAO;
import Entity.Region;
import SERVICE.RegionService;

@Service
@Path("/region")
public class RegionServiceImpl implements RegionService {

@Context UriInfo uriInfo;

@Resource(name="regionDAOimpl")//不需要set方法了
private RegionDAO regionDAOimpl;

/*public void setRegionDAOimpl(RegionDAO regionDAOimpl) {
this.regionDAOimpl = regionDAOimpl;
}*/

public RegionDAO getRegionDAOimpl() {
return this.regionDAOimpl;
}

@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_XML)
public Region findRegion(@PathParam("id") String id) {
System.out.println("10");
int code = Integer.valueOf(id);
System.out.println(regionDAOimpl == null);
return this.regionDAOimpl.selectRegion(code);
}


@PUT
@Produces("text/xml")
@Consumes(MediaType.APPLICATION_XML)
@Transactional
public int update(JAXBElement<Region> jaxbRegion) {
Region region = jaxbRegion.getValue();
int id = region.getCode();
return this.regionDAOimpl.updateRegion(id);
}

@Path("/{id}")//子资源方法
@Transactional
@DELETE
@Consumes("text/xml")
public void delete(@PathParam("id")int id) {
this.regionDAOimpl.deleteRegion(id);
}


@Transactional
@POST
@Produces("text/xml")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)//接受表单输入
public int insert(@FormParam("code") String code,
@FormParam("name") String name) {
Region region = new Region();
int id = Integer.valueOf(code);
region.setCode(id);
region.setName(name);
URI uri = uriInfo.getAbsolutePathBuilder().path(code).build();
Response.created(uri).build();
return this.regionDAOimpl.insertRegion(region);
}

public void test() {
System.out.println("ok");
}

}


applicationContext.xml配置:

<?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:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis="http://www.mybatis.org/schema/mybatis"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.mybatis.org/schema/mybatis
http://www.mybatis.org/schema/mybatis/mybatis-spring.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"
default-autowire="byName" ><!-- default-autowire="byName" -->

<context:annotation-config />
<context:component-scan base-package="Impl" />

<context:property-placeholder location="classpath:postgre.properties" />

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />

</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>


<bean id="regionmapper" class="org.mybatis.spring.mapper.MapperFactoryBean" >
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="DAO.RegionDAO"/>
</bean>

<!-- <bean id="regionDAOimpl" class="Impl.DAOImpl.RegionDAOImpl" >
<property name="regionmapper" ref="regionmapper"/>
</bean>

<bean id="regionServiceimpl" class="Impl.ServiceImpl.RegionServiceImpl" >
<property name="regionDAOimpl" ref="regionDAOimpl"/>
</bean> -->

</beans>



web.xml配置:

<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>


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


<servlet>
<servlet-name>JerseyRestTest</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>Impl.ServiceImpl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>JerseyRestTest</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>


运行时报空指针异常service里调用dao的方法出现的这个错误,于是我建立test测试:
ApplicationContext appContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
//System.out.println(appContext.getType("regionServiceimpl"));
RegionServiceImpl regionService = (RegionServiceImpl)appContext
.getBean(RegionServiceImpl.class);
regionService.test();

显示正常;
看了好多帖子,还是找不到解决问题的办法,求指教!!!!!!
...全文
729 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
梓龙的博客 2016-07-12
  • 打赏
  • 举报
回复
一月 22, 2014 4:50:43 下午 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container 楼主这个问题是怎么解决的哇?求指导
lilei0303 2014-01-23
  • 打赏
  • 举报
回复
搞了两天,终于弄完了,分享下我的经验: 导致spring注入失败的原因可能是(我自己这方面是这样): web.xml配置文件中: <servlet-class>一项原先配置是: com.sun.jersey.spi.container.servlet.ServletContainer 后来参考(之前没注意,该文结尾作者醒目的提示)http://www.cnblogs.com/qunyang/p/3328561.html将<servlet-class>一项改成:com.sun.jersey.spi.spring.container.servlet.SpringServlet 除此之外,导包也需要注意,不过这一点应该对大家不是问题,遇到错误,google就能找到 第三个提醒就是:mybatis框架配置中的映射文件配置中mapper namespace要和定义的接口名称一致 结尾:谢谢斑竹和各位的大力支持,要不是你们提醒我做个test,我也不会慢慢刨出问题,另外,以后我提问也要注意下排版细节,再次谢过!
oh_Maxy 2014-01-23
  • 打赏
  • 举报
回复
空指针 at Impl.ServiceImpl.RegionServiceImpl.findRegion(RegionServiceImpl.java:51) RegionServiceImpl 51行都做了什么操作呢?(你的代码没有排版,看不出行数)
lilei0303 2014-01-22
  • 打赏
  • 举报
回复
org.apache.ibatis.binding.BindingException产生这个异常原因找到了,原来是mapper namespace的名称和interface的名称不一致,这个是我参考的网址:http://blog.csdn.net/zgmzyr/article/details/8044980 但是最根本的异常还是存在: 下面是异常信息: 10 true 一月 22, 2014 4:50:43 下午 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container java.lang.NullPointerException at Impl.ServiceImpl.RegionServiceImpl.findRegion(RegionServiceImpl.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) 一月 22, 2014 4:50:43 下午 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [JerseyRestTest] in context with path [/Restdemo] threw exception java.lang.NullPointerException at Impl.ServiceImpl.RegionServiceImpl.findRegion(RegionServiceImpl.java:51) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724)
lilei0303 2014-01-22
  • 打赏
  • 举报
回复
引用 6 楼 panzhixiong_cn 的回复:
后台是用Hibernate吗?
用的是mybatis
lilei0303 2014-01-22
  • 打赏
  • 举报
回复
另外:我在spring的配置里配置了: <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />,因为之前没有红色标注的那部分,总是说找不到bean,但是删掉每个方法上的@transaction注解后就能找到,所以我到网上找了一些资料,添加了红色那部分,但我不知道这个添加会不会对现在产生的异常有影响,希望大神们了解这一点
panzhixiong_cn 2014-01-22
  • 打赏
  • 举报
回复
后台是用Hibernate吗?
lilei0303 2014-01-22
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
你前面的定义: @Repository(value="regionDAOimpl") public class RegionDAOImpl implements RegionDAO { @Resource private RegionDAO regionmapper; 感觉应该是这个regionmapper的问题。 那个测试类调用test方法没用到增删改查,因此没报错。 你具体错误日志是啥呢?
补充: mybatis里不是有个映射文件嘛,在这里我把RegionDAO就当成mapper接口,在applicationContext.xml里已经配置了 <bean id="regionmapper" class="org.mybatis.spring.mapper.MapperFactoryBean" > <property name="sqlSessionFactory" ref="sqlSessionFactory"/> <property name="mapperInterface" value="DAO.RegionDAO"/> </bean> ,另外我也在那个test类里测试了,代码如下: ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //System.out.println(appContext.getType("regionServiceimpl")); RegionServiceImpl regionService = (RegionServiceImpl)appContext .getBean(RegionServiceImpl.class); regionService.test(); Region region = regionService.findRegion("110101"); System.out.println(region.getName()); 异常产生了: Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): DAO.RegionDAO.selectRegion at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:184) at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38) at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42) at com.sun.proxy.$Proxy9.selectRegion(Unknown Source) at Impl.DAOImpl.RegionDAOImpl.selectRegion(RegionDAOImpl.java:24) at Impl.ServiceImpl.RegionServiceImpl.findRegion(RegionServiceImpl.java:51) at Impl.ServiceImpl.RegionServiceImpl$$FastClassByCGLIB$$b2d7903a.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:627) at Impl.ServiceImpl.RegionServiceImpl$$EnhancerByCGLIB$$a2f2447d.findRegion(<generated>) at Test.main(Test.java:21) 本人菜鸟一枚,请指教
jiekou0704 2014-01-22
  • 打赏
  • 举报
回复
说不出来。。具体日志看看
javaee_ssh 2014-01-22
  • 打赏
  • 举报
回复
不给异常日志怎么看
fw347969680 2014-01-22
  • 打赏
  • 举报
回复
再测试下增删改查的功能,看下是不是一样的错。
oh_Maxy 2014-01-22
  • 打赏
  • 举报
回复
你前面的定义: @Repository(value="regionDAOimpl") public class RegionDAOImpl implements RegionDAO { @Resource private RegionDAO regionmapper; 感觉应该是这个regionmapper的问题。 那个测试类调用test方法没用到增删改查,因此没报错。 你具体错误日志是啥呢?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧