为什么C类在A类中可以访问执行,同样的代码COPY到B类时,就出现下面异常
Caused by: java.lang.NoClassDefFoundError: com/paic/is/paieas/common/web/codetable/CodeTableUtil
at com.paic.is.paieas.bailtransfer.util.InitPageData.referenceData(InitPageData.java:28)
at com.paic.is.paieas.pending.biz.action.PendingSingleTaskQueryAction.perform(PendingSingleTaskQueryAction.java:66)
at com.paic.pafa.app.biz.ac.impl.ApplicationControllerBean.handleRequest(ApplicationControllerBean.java:91)
at com.paic.pafa.app.biz.ac.impl.pafaAC_q25x5e_EOImpl.handleRequest(pafaAC_q25x5e_EOImpl.java:46)
... 34 more

解决方案 »

  1.   

    同样的代码copy到B类实什么意思
      

  2.   

    //===================================================
    package com.paic.is.paieas.common.web.codetable;import java.util.List;
    import java.util.Map;
    import java.rmi.RemoteException;
    import javax.servlet.http.HttpServletRequest;import com.paic.pafa.app.biz.ac.ApplicationController;
    import com.paic.pafa.app.biz.ac.ApplicationControllerException;
    import com.paic.pafa.app.dto.ServiceRequest;
    import com.paic.pafa.app.dto.ServiceResponse;
    import com.paic.pafa.app.dto.TableCodeDTO;
    import com.paic.pafa.app.lwc.core.context.ApplicationContext;
    import com.paic.pafa.app.lwc.core.context.support.PafaAppCommonContexton;
    import com.paic.pafa.app.lwc.core.context.support.PafaCoreContexton;
    import com.paic.pafa.core.exceptions.PafaRuntimeException;import com.paic.is.paieas.common.util.ServiceRequestID;
    import com.paic.is.paieas.common.web.util.WebContextNames;/**
     * CodeTableUtil封装了在Web层获取CodeTable的操作。
     * @author dingcy
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class CodeTableUtil {    /**
         * 从数据库取得CodeTable数据
         *
         * @param codeTableParams 代码表类型等参数。
         * @return a List of TableCodeDTO
         * @see TableCodeDTO
         */
        private static List populateData(Map codeTableParams) {
            // 获得ApplicationContext
            ApplicationContext ctx = (ApplicationContext) PafaAppCommonContexton.getInstance();        // 获得ApplicationController(AC),通过它把web层的请求调度到biz层
            ApplicationController ac =
                    (ApplicationController) ctx.getBean(WebContextNames.PAFA_AC);        // 构建ServiceRequest
            ServiceRequest serviceRequest = new ServiceRequest();
            serviceRequest.setRequestedServiceID(ServiceRequestID.CODE_TABLE_ACTION);
            serviceRequest.setParameter("codeTableParams", codeTableParams);        // 取得当前的Transaction ID
            String txnId = PafaCoreContexton.getInstance().getThreadContext().getTxnID();        ServiceResponse serviceResponse = null;
            try {
                // 通过AC处理请求,返回ServiceResponse
                serviceResponse = ac.handleRequest(serviceRequest);
            } catch (ApplicationControllerException e) {
                // 对于获取CodeTable时发生的错误,认为是系统错误,不是用户能够恢复的。
                // 认为这个错误是用户不可恢复的(比如不属于输入错误)
                // 抛出PafaRuntimeException            // 错误信息用代码表示,这样为后面格式化处理错误信息提供了可能
             throw new PafaRuntimeException(txnId, "populateData",
                        "paieas.error.codetable", e);
            } catch (RemoteException e) {
             throw new PafaRuntimeException(txnId, "populateData",
                        "paieas.error.codetable", e);
            }        // 从ServiceResponse中取得所需的数据模型
            Map model = serviceResponse.getModel();
            List tableCodes = (List) model.get(ServiceResponse.SERVICE_RESPONSE_RESULT);
            return tableCodes;
        }    /**
         * 根据指定的代码表类型获得相应的代码表。
         * 无查询参数,获得的代码表缓存在ServletContext;有查询参数的则需每次重查。
         *
         * @param request       当前的HTTP请求
         * @param codeTableParams 代码表类型等参数。
         * @return 一组TableCodeDTO,可能是TableCodeDTO的子类
         */
        public static TableCodeDTO[] getTableCodes(HttpServletRequest request, Map codeTableParams) {
            TableCodeDTO[] talbeCodeDTOs = null;        //重新生成数据
            List result = populateData(codeTableParams);
            talbeCodeDTOs = (TableCodeDTO[]) result.toArray(new TableCodeDTO[result.size()]);
            
            return talbeCodeDTOs;
        }
    }//===================================
    package com.paic.is.paieas.bailtransfer.util;import java.util.HashMap;
    import java.util.Map;import javax.servlet.http.HttpServletRequest;import com.paic.is.paieas.common.web.codetable.CodeTableUtil;
    import com.paic.pafa.app.dto.TableCodeDTO;public class InitPageData {
    /**
     * 绑定参考数据
     */
    public static Map referenceData(HttpServletRequest request) {
    Map model = new HashMap(); // 短期评级下拉列表
    // 打包参数
    Map codeTableParams = new HashMap();
    // 固定参数
    codeTableParams.put("sqlName", "getCompanyList");
    // 获取代码列表
    try {
    Class.forName("com.paic.is.paieas.common.web.codetable.CodeTableUtil");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    TableCodeDTO[] companyTableCodes = CodeTableUtil.getTableCodes(
    request, codeTableParams);
    model.put("companyTableCodes", companyTableCodes); // 币种下拉列表
    // 打包参数
    codeTableParams = new HashMap();
    // 固定参数
    codeTableParams.put("sqlName", "getCurrencyList");
    // 获取代码列表
    TableCodeDTO[] currencyTableCodes = CodeTableUtil.getTableCodes(
    request, codeTableParams);
    model.put("currencyTableCodes", currencyTableCodes); // 资金来源下拉列表
    // 打包参数
    codeTableParams = new HashMap();
    // 固定参数
    codeTableParams.put("sqlName", "getFundSourceList");
    // 获取代码列表
    TableCodeDTO[] fundSourceTableCodes = CodeTableUtil.getTableCodes(
    request, codeTableParams);
    model.put("fundSourceTableCodes", fundSourceTableCodes); String fundSum = request.getParameter("interior_payment_fundSum");
    model.put("interiot_payment_fundSum", fundSum);
    String index = request.getParameter("interior_payment_index");
    model.put("interior_payment_index", index); // 固定参数
    codeTableParams.put("sqlName", "getBankAccountList");
    // 获取代码列表
    TableCodeDTO[] bankTableCodes = CodeTableUtil.getTableCodes(
    request, codeTableParams);
    model.put("bankTableCodes", bankTableCodes); return model;
    }
    }
      

  3.   

    类A中可以执行的代码COPY到类B中(A调用了C的静太方法,将A的方法移到B类中)
      

  4.   

    从页面提交到A,调用C
    从页面提交到B,调用C
      

  5.   

    Class.forName("com.paic.is.paieas.common.web.codetable.CodeTableUtil");
    这个地方是不是要改一下
      

  6.   

    我将C类方法全copy到B类,在B类中调用本身方法这样是没问题的,说明,和C类引用的类无关
      

  7.   

    乍一看还以为哪个小弟CLASSPATH设错了呢,进来就受打击了
      

  8.   

    这是垃圾JDBC的包的问题,谢谢大家