配置Spring时出现的问题:NullPointerException
实在找不到原因了,今天弄了一天了,中间除了现在 "It is indirectly referenced from required .class files" 问题上也浪费不少时间,hofman有空的帮看一眼吧。 另外我连数据库时加上 ?useUnicode=true&characterEncoding=UTF-8 后中文问题依旧,不过这个不重要,可能是其它方面出的问题。
先贴我的 action 类,已经精简到单元测试了,在用hibernate直接操作时都是没有问题的:
CategoryAction.java
WpTermsDAO.java
hibernate.cfg.xml
applicationContext.xml
错误信息:
先贴我的 action 类,已经精简到单元测试了,在用hibernate直接操作时都是没有问题的:
CategoryAction.java
package com.blog.struts.action;
import "<struts>";
import com.blog.WpTerms;
import com.blog.WpTermTaxonomy;
import com.blog.WpTermsDAO;
import com.blog.WpTermTaxonomyDAO;
public class CategoryAction extends Action {
private WpTermsDAO wpTerms;
private WpTermTaxonomyDAO wpTermTaxonomy;
public void setWpTerms(WpTermsDAO wpt) {
this.wpTerms = wpt;
}
public void setWpTermTaxonomy(WpTermTaxonomyDAO wptTax) {
this.wpTermTaxonomy = wptTax;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
CategoryForm cf = (CategoryForm) form;
// stub
String name = cf.getCatName();
......
try {
WpTerms wpt = new WpTerms();
......
wpTerms.save(wpt);
System.out.println("新目录创建成功: " + wpt.getTermId());
return mapping.findForward("createSuccess");
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("errorMessage", "保存目录信息时出错,错误代码:01。");
}
return mapping.findForward("createFailed");
}
}
import "<struts>";
import com.blog.WpTerms;
import com.blog.WpTermTaxonomy;
import com.blog.WpTermsDAO;
import com.blog.WpTermTaxonomyDAO;
public class CategoryAction extends Action {
private WpTermsDAO wpTerms;
private WpTermTaxonomyDAO wpTermTaxonomy;
public void setWpTerms(WpTermsDAO wpt) {
this.wpTerms = wpt;
}
public void setWpTermTaxonomy(WpTermTaxonomyDAO wptTax) {
this.wpTermTaxonomy = wptTax;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
CategoryForm cf = (CategoryForm) form;
// stub
String name = cf.getCatName();
......
try {
WpTerms wpt = new WpTerms();
......
wpTerms.save(wpt);
System.out.println("新目录创建成功: " + wpt.getTermId());
return mapping.findForward("createSuccess");
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("errorMessage", "保存目录信息时出错,错误代码:01。");
}
return mapping.findForward("createFailed");
}
}
WpTermsDAO.java
package com.blog;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class WpTermsDAO extends HibernateDaoSupport {
protected void initDao() {
// do nothing
}
public void save(WpTerms transientInstance) {
System.out.println("============================");
//单无测试只剩这些了,本来应该有不少方法的
}
}
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class WpTermsDAO extends HibernateDaoSupport {
protected void initDao() {
// do nothing
}
public void save(WpTerms transientInstance) {
System.out.println("============================");
//单无测试只剩这些了,本来应该有不少方法的
}
}
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">jdbc:mysql://localhost:3306/home_wp_blog?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">
com.mysql.jdbc.Driver
</property>
<mapping resource="com/blog/WpTerms.hbm.xml"></mapping>
<mapping resource="com/blog/WpTermTaxonomy.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">jdbc:mysql://localhost:3306/home_wp_blog?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">
com.mysql.jdbc.Driver
</property>
<mapping resource="com/blog/WpTerms.hbm.xml"></mapping>
<mapping resource="com/blog/WpTermTaxonomy.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<bean id="WpTermsDAO" class="com.blog.WpTermsDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<bean id="WpTermTaxonomyDAO" class="com.blog.WpTermTaxonomyDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<bean name="/category" class="com.blog.struts.action.CategoryAction"
singleton="false">
<property name="wpTerms">
<ref bean="WpTermsDAO" />
</property>
<property name="wpTermTaxonomy">
<ref bean="WpTermTaxonomyDAO" />
</property>
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
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-2.0.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<bean id="WpTermsDAO" class="com.blog.WpTermsDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<bean id="WpTermTaxonomyDAO" class="com.blog.WpTermTaxonomyDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<bean name="/category" class="com.blog.struts.action.CategoryAction"
singleton="false">
<property name="wpTerms">
<ref bean="WpTermsDAO" />
</property>
<property name="wpTermTaxonomy">
<ref bean="WpTermTaxonomyDAO" />
</property>
</bean>
</beans>
错误信息:
java.lang.NullPointerException
at com.blog.struts.action.CategoryAction.execute(CategoryAction.java:74)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
at com.blog.struts.action.CategoryAction.execute(CategoryAction.java:74)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
meiking
2008-05-11 23:54:10
评论:7
阅读:80
引用:0
@2008-05-12 13:06:25 meiking
好啊,我正想着这周未上哪蹭饭去呢。
@2008-05-12 12:34:52 idiot
根据提示是CategoryAction.java:74行错误,但你的代码行数贴上来已经缩减了一些行数,所以你在本地跟踪下吧。
另外感觉你这个例子就不是很好,action直接调用dao数据库操作,跳过了业务逻辑层,难怪看spring配置那么别扭。
我有两本很不错的书(关于hibernate和spring的,里面的项目能够跑起来),有时间过来拿,可以借给你看看。感觉能给你减少走弯路。
另外感觉你这个例子就不是很好,action直接调用dao数据库操作,跳过了业务逻辑层,难怪看spring配置那么别扭。
我有两本很不错的书(关于hibernate和spring的,里面的项目能够跑起来),有时间过来拿,可以借给你看看。感觉能给你减少走弯路。
@2008-05-12 10:01:15 hofman
HTT P,c o m, c n ,Q Q等全部封杀,每天拦截垃圾留言无数,误杀率不到5%。
@2008-05-12 00:22:57 meiking
咱博客的评论里好像是屏蔽掉了 "H TT P"吧,老是说我不受欢迎,才明白过来可能是过滤的原因。
@2008-05-12 00:21:13 meiking
恩,你写的那篇文章我看过很多篇了,主要是了解框架,而我是跟着网上另一篇文章走的,因为刚刚好用的IDE是完全一样的。 可能是我有点急进了,下次还是应该从简单的例子开始学起。
log.csdn.net/chenyun2000/archive/2007/11/21/1896670.aspx
这是我参照的例子,也还比较完整,不过不够细,照他这走碰见不少问题。
log.csdn.net/chenyun2000/archive/2007/11/21/1896670.aspx
这是我参照的例子,也还比较完整,不过不够细,照他这走碰见不少问题。
@2008-05-12 00:11:48 hofman
/lunzi/51263.html,/hofman/21949.html,lunzi学习时,比较注意参考,这样少走了弯路。
@2008-05-11 23:56:00 meiking
对了,我现在的环境是 hibernate3.1和spring2.0
