小弟初学,遇到s2sh空指针异常,请高手指点

wwwww112233 2012-07-20 02:30:19
报错如下
java.lang.NullPointerException
p.controller.LoginAction.execute(LoginAction.java:41)
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)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)


其中,我的LoginAction为:
public class LoginAction implements Action {

private String userName;
private String password;
private IUserService userService;

public String getUserName() {
return userName;
}

public IUserService getUserService() {
return userService;
}

public void setUserService(IUserService userService) {
this.userService = userService;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}


@Override
public String execute() throws Exception {
if(userService.IsValidUser(userName, password)){//就是这里userService为null!! return SUCCESS;
}else {
return ERROR;
}
}


applicationContext.xml文件为:
<bean id="loginAction" class="p.controller.LoginAction"
abstract="false" lazy-init="default" autowire="default">
<property name="userService">
<ref bean="UserService" />
</property>
</bean>
<bean id="UserService" class="p.Service.Impl.UserService"
abstract="false" lazy-init="default" autowire="default">
<property name="userDAO">
<ref bean="UserDAO" />
</property>
</bean>
<bean id="UserDAO" class="p.dao.impl.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>


struts.xml为
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

<constant name="struts.objectFactory" value="spring" />
<package name="main" extends="struts-default">
<action name="login" class="p.controller.LoginAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>

</package>

</struts>


小弟真是搞昏头了还是一直抛出空指针异常
我是用myeclipse 10,Apache Tomcat/6.0.13(这个是myeclipse 自带的那个),win 7
我在LoginAction.java上打了不少断点,启动Tomcat正常,当部署时,进入debug,这个时候我发现
public void setUserService(IUserService userService) {
this.userService = userService;
}

这段代码是正常的,而且此时userService是有值的,可是当部署完成,我进入login.jsp首页输入用户名以及密码,再运行的时候,发现LoginAction.java中账户以及密码值都能获取到,上面那段setUserService的代码也会执行,可是这时得到的userService永远是null,如何进入execut()都就抛出最前面的null异常了。

求各位大哥帮忙看看,谢谢!!!!!
...全文
175 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwww112233 2012-07-20
  • 打赏
  • 举报
回复
我自己解决了,这下运行正常了。
前面是
<action name="login" class="p.controller.LoginAction">

改为
<action name="login" class="loginAction">


后面那个异常是JAR包的冲突 antlr2.7.2 与 antlr2.7.6 冲突
删除antlr2.7.2 即可。
谢谢!!
wwwww112233 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
NoSuchMethodError: antlr.collections.AST.getLine() 明显没有找到这个方法findByUserName啊
[/Quote]

	@Override
public List findByUserName(Object userName) {
return findByProperty(USER_NAME, userName);
}


public List findByProperty(String propertyName, Object value) {
log.debug("finding User instance with property: " + propertyName
+ ", value: " + value);
try {
String queryString = "from User as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
}


谢谢,我发现上面的异常是执行findByUserName()这个方法的时候,进入findByProperty()的时候这个方法抛出的异常
String queryString = "from User as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);

那句return出的异常。但这段代码是Hibernate自动生成的呀。这是为什么....
Tommyzcg 2012-07-20
  • 打赏
  • 举报
回复
您配置的是UserService ,而在 action 调用的是 userService .
注意大小写啊。
坐观垂钓者 2012-07-20
  • 打赏
  • 举报
回复
NoSuchMethodError: antlr.collections.AST.getLine() 明显没有找到这个方法findByUserName啊
wwwww112233 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
struts.xml的配置文件里。把
<action name="login" class="p.controller.LoginAction">

改为
<action name="login" class="loginAction">

即struts.xml的class里的内容跟spring配置文件里的id一致。
改过之后你再试试
[/Quote]

谢谢!按照你的修改解决了,取到值了,不过下一步就是执行IsValidUser(String username, String password)方法的时候又抛异常了。。。。。大哥能否在帮忙看下
	public boolean IsValidUser(String username, String password) {
List users = userDAO.findByUserName(username);//debug发现就是这句导致的异常
if (users == null || users.isEmpty()) {
return false;
}
User user = (User) users.get(0);
if (user.getPassword().equals(password)) {
return true;
} else {
return false;
}
}


异常如下:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.reflect.InvocationTargetException
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)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
.....
------
root cause

java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
org.hibernate.hql.ast.HqlSqlWalker.generatePositionalParameter(HqlSqlWalker.java:896)
org.hibernate.hql.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:4819)
org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1373)
org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4243)
org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3725)
org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1864)
org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:818)
org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:604)
org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)





我在网上查说是jar冲突,可我自己没有另外加jar包啊

谢谢!!!!
那四年的誓言 2012-07-20
  • 打赏
  • 举报
回复
楼上正解
qiaowan19900712 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
应该是IUserService类没有实现注入吧!!
[/Quote]++注入接口
guanzijuan123 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

struts.xml的配置文件里。把
<action name="login" class="p.controller.LoginAction">

改为
<action name="login" class="loginAction">

即struts.xml的class里的内容跟spring配置文件里的id一致。
改过之后你再试试
[/Quote]


正解,struts的xml和spring的xml中的action的name值是一样滴
gzqGyula 2012-07-20
  • 打赏
  • 举报
回复
应该是IUserService类没有实现注入吧!!
lixiaomeng627 2012-07-20
  • 打赏
  • 举报
回复
struts.xml的配置文件里。把
<action name="login" class="p.controller.LoginAction">

改为
<action name="login" class="loginAction">

即struts.xml的class里的内容跟spring配置文件里的id一致。
改过之后你再试试

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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