大概花了三天时间在这个框架搭建上。拜托各位高手,请大家一起来我们把它解决掉吧!如何解决的一定会告诉大家,运行通过就结贴!
版本:hibernate3.3,spring3.0,struts2.1
运行后报错如下,不知道是xml文件的问题还是jar包冲突的问题?请大侠给看看,我会在后面以跟帖的形式把源码都发上来。
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:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
root cause java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
org.hibernate.hql.ast.HqlSqlWalker.generatePositionalParameter(HqlSqlWalker.java:876)
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)
 (省略)

解决方案 »

  1.   

    按项目的从上到下顺序把程序代码给出:
    actions包:
    package actions;
    import java.util.Map;import service.ILoginCheck;import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;import dao.Users;public class testAction extends ActionSupport { private Users user;
    public Users getUser() {
    return user;
    }
    public void setUser(Users user) {
    this.user = user;
    }
    private ILoginCheck loginCheck;
     
    public ILoginCheck getLoginCheck() {
    return loginCheck;
    }
    public void setLoginCheck(ILoginCheck loginCheck) {
    this.loginCheck = loginCheck;
    }
    public String execute() {
    user = new Users(3,"a","b",2);
    boolean flag = loginCheck.isLogin(user);
    if(flag){
       return SUCCESS;
    }
     else {return ERROR;}
    }
    }
      

  2.   

    dao包:
    IUser.java:
    package dao;public interface IUser {
    public Users findByName(String name);
    }
    UserDAO.java:
    package dao;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class UserDAO extends HibernateDaoSupport implements IUser{
    @SuppressWarnings("unchecked")
    public Users findByName(String name) {
    // TODO Auto-generated method stub
    List<Users>list=this.getHibernateTemplate().find("from Users as u where u.userName = ?", name);
        if(list.size()>0){
         return list.get(0);
    }  
        else{
         return null; 
    }
    }}
    Users.java:
    package dao;/**
     * Users entity. @author MyEclipse Persistence Tools
     */public class Users implements java.io.Serializable { // Fields private Integer id;
    private String userName;
    private String userPwd;
    private Integer userStatus; // Constructors /** default constructor */
    public Users() {
    } /** minimal constructor */
    public Users(Integer id) {
    this.id = id;
    } /** full constructor */
    public Users(Integer id, String userName, String userPwd, Integer userStatus) {
    this.id = id;
    this.userName = userName;
    this.userPwd = userPwd;
    this.userStatus = userStatus;
    } // Property accessors public Integer getId() {
    return this.id;
    } public void setId(Integer id) {
    this.id = id;
    } public String getUserName() {
    return this.userName;
    } public void setUserName(String userName) {
    this.userName = userName;
    } public String getUserPwd() {
    return this.userPwd;
    } public void setUserPwd(String userPwd) {
    this.userPwd = userPwd;
    } public Integer getUserStatus() {
    return this.userStatus;
    } public void setUserStatus(Integer userStatus) {
    this.userStatus = userStatus;
    }}
    Users.hbm.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="dao.Users" table="USERS" schema="dbo" catalog="NewEpai">
            <id name="id" type="java.lang.Integer">
                <column name="Id" />
                <generator class="native" />
            </id>
            <property name="userName" type="java.lang.String">
                <column name="userName" length="50" />
            </property>
            <property name="userPwd" type="java.lang.String">
                <column name="userPwd" length="50" />
            </property>
            <property name="userStatus" type="java.lang.Integer">
                <column name="userStatus" />
            </property>
        </class>
    </hibernate-mapping>
      

  3.   

    service包:
    ILoginCheck.java:
    package service;import dao.Users;public interface ILoginCheck{
      public boolean isLogin(Users user);
    }
    LoginCheck.java:
    package service;import dao.IUser;
    import dao.Users;
    public class LoginCheck implements ILoginCheck{
        private IUser userDAO;
       public void setUserDAO(IUser userDAO){
          this.userDAO = userDAO;
          }
       public boolean isLogin(Users user){
         Users newUser = userDAO.findByName("a");
       if(newUser==null){return false;}
       else if (!newUser.getUserPwd().equals(user.getUserPwd())){
                 return false;
      } 
       else {return true;}
      }
      
    }
      

  4.   

    src下的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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
    </property>
    <property name="url"
    value="jdbc:sqlserver://localhost:1433; DatabaseName=NewEpai">
    </property>
    <property name="username" value="sa"></property>
    <property name="password" value="666666"></property>
    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect
    </prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>dao/Users.hbm.xml</value></list>
    </property></bean>
    <bean id="hibernateTemplate" 
              class="org.springframework.orm.hibernate3.HibernateTemplate"> 
            <property name="sessionFactory"> 
            <ref bean="sessionFactory"/> 
            </property> 
            </bean> 
    <bean id="userDAO" class="dao.UserDAO">
            <property name="hibernateTemplate" ref="hibernateTemplate"/>
            </bean>
              <bean id="loginCheck" class="service.LoginCheck">
            <property name="userDAO" ref="userDAO"/>
              </bean>
              <bean id="testAction" class="actions.testAction">
               <property name="loginCheck" ref="loginCheck"></property>
              </bean>
      </beans>
    src下的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> <package name="actions" extends="struts-default">
    <action name="testAction" class="actions.testAction">
    <result name="success">/index.jsp</result>
    <result name="error">/error.jsp</result>
    </action>
    </package></struts>    
      

  5.   

    web.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <filter>
       <filter-name>struts2</filter-name>
       <filter-class>
       org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
       </filter-class>
      </filter>
      <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml
    </param-value>
    </context-param>
      </web-app>
      

  6.   

    index.jsp:
    <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
      </head>
      
      <body>
        <form action="testAction">
            直接到testAction里面new user了。
        <input type="submit" value="submit">
        </form>
      </body>
    </html>
    error.jsp:
    <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title> error</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
      <body>
       error
      </body>
    </html>
      

  7.   

    把antlr.jar换成你所下载的hibernate 自带的antlr试试
      

  8.   

    使用MyEclipse有集成的包嘛。在环境基础上搭一个试试!
      

  9.   

    大哥,用的就是环境搭建的,包没法拆开,都是系统的libary
      

  10.   

    运行没报错,但是用struts一跳转就出异常。大侠们快帮帮忙。现在基本可以肯定是包冲突的问题,因为Myeclipse的Installed jre和tomcat应用的jre是一个版本的没错我核对过了。tomcat我又新装了一次,装了7.0.6.现在运行起来console下面没有异常,只是跳转的时候出异常,那么应该是调用方法的时候在调用jar包的时候出错。
      

  11.   

    貌似是 antlr.jar 包,版本冲突。你看看lib文件夹下面是不是两个antlr的jar包,
    如果就一个,那你去hibernate的zip包里面,有个reqire文件夹里面,
    有个antlr的jar包,把它拿出来,替换lib里面的antlr的jar包。
      

  12.   

    Hibernate和Spring,在某些情况下,都会动态生成字节码文件,
    有可能都会用到antlr.jar文件,
    由于两个框架不是同一团队开发的,
    所以,有可能使用不同版本的antlr.jar文件进行开发。
    我们所要做的,就是找到兼容的antlr.jar文件,放到lib目录里面。
      

  13.   

    还是不行啊!跟删包不删包没关系。
    有同事告诉我loginAction!add必须这样调用loginAction中地方法才可以,而不能直接用loginAction然后到xml中间指定method="add"否则方法进不去,为什么?