那一定是digester这个对象为null了
你打印一下看看

解决方案 »

  1.   

    多谢v38,刚打印了一下,不为空啊:“org.apache.commons.digester.Digester@18c458”,郁闷啊
      

  2.   

    digester.parse可能调用了in的某个getter,而那个getter返回值为null
    能查到digester.parse的源码吗?
      

  3.   

    可能是,digester.parse源码找不到,但digester.parse要用到SalesConfig.java和DaoConfig.java这两个类,这两个类和配置文件中的<config>和子元素<dao>对应:
    package cn.hsales.sales.config;import org.apache.commons.lang.builder.ToStringBuilder;import cn.hsales.sales.exception.SalesException;/**
     * DAO配置信息类
     */
    public class DaoConfig { private String id;
    private String type; public String getId() 
    {
    return id;
    }
    public void setId(String id) 
    {
    this.id = id;
    }

    public String getType() 
    {
    return type;
    }
    public void setType(String type) 
    {
    this.type = type;
    }

    private Object instance; /**
     * 得到配置的对象的实例
     */
    public Object getInstance() 
    {
    if( null!=instance ) return instance;

    try
    {
    Class cls = Class.forName( getType() );
    instance = cls.newInstance();
    return instance;
    }
    catch( Exception ex )
    {
    throw new SalesException( "Couldn't find class:" + getType() );
    }
    }

    public String toString()
    {
    return ToStringBuilder.reflectionToString( this );
    }}package cn.hsales.sales.config;import java.util.Hashtable;import org.apache.commons.lang.builder.ToStringBuilder;import cn.hsales.sales.exception.SalesException;/**
     * 系统配置信息类
     */
    public class SalesConfig { public static Hashtable<String, DaoConfig> beans; /**
     * 构造函数
     */
    public void salesConfig()
    {
    beans = new Hashtable();
    } /**
     * 增加一个BeanConfig对象
     * @param bean
     */
    public void addDao(DaoConfig bean)
    {
    beans.put(bean.getId(), bean);
    } /**
     * 得到一个DAO接口对象的实例
     * @param name DAO接口对象的名称
     * @return 指定DAO接口的实现类的实例
     */
    public Object getDao(String name)
    {
    DaoConfig config = (DaoConfig) beans.get(name); if (config == null)
    {
    throw new SalesException("Couldn't find the dao: " + name);
    } return config.getInstance();
    } public String toString()
    {
    return ToStringBuilder.reflectionToString(this);
    }
    }这里要调用2次get,不知道哪里出错了,兄弟帮我看看,谢谢了
      

  4.   

    可以尝试单独调用 digester.parse(in); 看看是否还抛异常.如果还是NullPointerException,那就仔细分析下digester吧,看看声明的时候是否有问题;如果没有异常的话好象有点说不过去...呵呵
      

  5.   

    应该是digester.parse(in); 的parse里有空异常了。
      

  6.   

    单独调用digester.parse(in); 一样抛出异常,可能就象yeah920说的那样parse里有空异常了,可这种异常不好检测啊 ,,靠 我都想杀人了
      

  7.   

    把System.out.println(in);去掉试试
      

  8.   

    if (in != null){config = (SalesConfig)digester.parse(in);}
    有这样的判断了,应该是digester的问题,看看声明处是否正常(你的程序中的if()后面有没有{}啊...)
      

  9.   

    回复super000(水风烛月)老兄,把System.out.println(in);去掉异常行就跑到config = (SalesConfig)digester.parse(in);这行上,反正问题处在digester.parse(in)上回复moonest() 老兄,声明是这样的:
    Digester digester = new Digester();
    digester.setValidating(false); // 设置处理规则
    digester.addObjectCreate("config", "cn.hsales.sales.config.SalesConfig");
    digester.addSetProperties("config"); digester.addObjectCreate("config/dao","cn.hsales.sales.config.DaoConfig");
    digester.addSetProperties("config/dao");
    digester.addSetNext("config/dao", "addDao","cn.hsales.sales.config.DaoConfig"); ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    //InputStream in = null;
        in = classLoader.getResourceAsStream("SalesConfig.xml");
        System.out.println(in);
    SalesConfig config = null;
    try {
    if (in != null)
    if(digester.parse(in) != null)
    config = (SalesConfig)digester.parse(in);
    应该正常,另外if后面只有一个语句的话不要{}也一样啊
      

  10.   

    一开始异常不是出在config = (SalesConfig)digester.parse(in);?怎么把System.out.println(in);去掉异常行就跑到config = (SalesConfig)digester.parse(in);...如果System.out.println(in);出现异常那 in = classLoader.getResourceAsStream("SalesConfig.xml");这里就可能有问题啊,你监测下in的赋值
    if语句还是加上{}吧,这样看的怪怪的,跟个美女少穿件衣服似的.
      

  11.   

    哦,不好意思,看错,以为是System.out.println(digester.parse(in));呢,因为我测试digester.parse(in)时异常就跑到这一行了。System.out.println(in);在这里没影响吧,就是出现问题了才用System.out.println(in);打印看看in是否为null,结果in不为null,所以问题出在digester.parse(in),但就是找不到!!
      

  12.   

    晕啊,找不到错误只好不用digester和配置文件了,先用别的,以后找到问题后再 改过来!!