代码如下:private static ApplicationContext actx = null;    public void run()
    {
        initApplicationContext();        
    }    protected void initApplicationContext()
    {
        if (actx == null)
        {
            try
            {
                System.out.println(InitialServlet.APPLICATION_CONFIGE_PATH);FIGE_PATH);
             actx = new FileSystemXmlApplicationContext(InitialServlet.APPLICATION_CONFIGE_PATH);FIGE_PATH);                
                                
            }
            catch (Exception ex)
            {
                logger.error("init error :", ex);
            }
        }
    }日志中记录的异常为: - init error :
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [/home/gmccserver/czmobile/tomcat/bin/home/gmccserver/czmobile/HZMobile/WEB-INF/conf/applicationContextByUpdateLog.xml]; nested exception is java.io.FileNotFoundException: home/gmccserver/czmobile/HZMobile/WEB-INF/conf/applicationContextByUpdateLog.xml (No such file or directory)
Caused by: 
java.io.FileNotFoundException: home/gmccserver/czmobile/HZMobile/WEB-INF/conf/applicationContextByUpdateLog.xml (No such file or directory)但是out.println()打印出来的文件路径是正确的(/home/gmccserver/czmobile/HZMobile/WEB-INF/conf/applicationContextByUpdateLog.xml ),在解析的时候怎么就少了个“/”,报文件路径找不到!
虽然后来我判断了下,加了个“/”上去了,能正常跑起来
但是就是不明白解析的时候为什么会出错,FileSystemXmlApplicationContext不是不分绝对路径和相对路径的吗?

解决方案 »

  1.   

    帖子代码中 FIGE_PATH); 是多余的,复制错了,请忽略。
      

  2.   

    是啊,他总是当作是相对路径的
    FileSystemXmlApplicationContext总是去掉开头的/,见源代码
    protected Resource getResourceByPath(String path) {
    if (path != null && path.startsWith("/")) {
    path = path.substring(1);
    }
    return new FileSystemResource(path);
    }
      

  3.   

    java.io.FileNotFoundException: home/gmccserver/czmobile/HZMobile/WEB-INF/conf/applicationContextByUpdateLog.xml (No such file or directory)错误太明显了吧,不存在那个目录和文件啊!对了,最前面的那个/怎么没有啊?应该是下面这个吧!
    /home/gmccserver/czmobile/HZMobile/WEB-INF/conf/applicationContextByUpdateLog.xml
      

  4.   

    恩。但是在WINDOWS环境下是没问题的,而且这个系统在其它LINUX下跑起来也没问题,请问是不是与系统哪里的设置有关呢?
      

  5.   

    加上file:试试:
    actx = new FileSystemXmlApplicationContext(“file:”+InitialServlet.APPLICATION_CONFIGE_PATH)
      //用classpath路径也可以       // ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:appcontext.xml");//      ApplicationContext factory=new ClassPathXmlApplicationContext("appcontext.xml");       // ApplicationContext factory=new ClassPathXmlApplicationContext("file:G:/1Java实用项目资源/2Spring/1精通Spring全Jar代码/workspace/workspace/example6/src/appcontext.xml");                    //用文件系统的路径        //  ApplicationContext factory=new FileSystemXmlApplicationContext("src/appcontext.xml");          //使用了  classpath:  前缀,作为标志,  这样,FileSystemXmlApplicationContext 也能够读入classpath下的相对路径      //  ApplicationContext factory=new FileSystemXmlApplicationContext("classpath:appcontext.xml");     //   ApplicationContext factory=new FileSystemXmlApplicationContext("file:G:/1Java实用项目资源/2Spring/1精通Spring全Jar代码/workspace/workspace/example6/src/appcontext.xml");        ApplicationContext factory=new FileSystemXmlApplicationContext("G:/1Java实用项目资源/2Spring/1精通Spring全Jar代码/workspace/workspace/example6/src/appcontext.xml");
      

  6.   

    if (path != null && path.startsWith("/")) 
                path = path.substring(1); 
            } 
    只有*nux操作系统的路径才会以/开头,
    windows上都是:d:/什么的,
    所以,不会被截断一个字符。
      

  7.   

    另一个问题,我觉得楼主的APPLICATION_CONFIGE_PATH变量,
    还是配置相对路径比较好。
      

  8.   

    if (path != null && path.startsWith("/")) {
                path = path.substring(1);
            } 
    源码都给你拉,难道还不懂?
      

  9.   

    FileSystemXmlApplicationContext 的源码会自动取消第一个"/" 在linux文件的绝对路径去掉了/就是错的。因此
    String path="//opt/IBM/WebSphere/AppData/aa.ear/aa.war/WEB-INF/spring/jdbc-config.xml";
    c1 = new FileSystemXmlApplicationContext(new String[] {(path)});
    前面多加一个“/”即可