Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java从war的lib文件夹中的jar中读取一个文件_Java_Xml_Spring_Tomcat_Jar - Fatal编程技术网

Java从war的lib文件夹中的jar中读取一个文件

Java从war的lib文件夹中的jar中读取一个文件,java,xml,spring,tomcat,jar,Java,Xml,Spring,Tomcat,Jar,我有一个Spring应用程序,我试图从jar中读取xml文件,jar位于构建应用程序war的lib文件夹中,即/WEB-INF/lib/abc.jar 现在我正在使用这个代码 InputStream reader = SomeClassInabcJars.class .getResourceAsStream("/META-INF/spring/beans.xml"); 在此之后,我将使用DOM解析器从中获取所有bean标记 如果我使用命令mv

我有一个Spring应用程序,我试图从jar中读取xml文件,jar位于构建应用程序war的lib文件夹中,即/WEB-INF/lib/abc.jar

现在我正在使用这个代码

InputStream reader = SomeClassInabcJars.class
                          .getResourceAsStream("/META-INF/spring/beans.xml");
在此之后,我将使用DOM解析器从中获取所有bean标记

如果我使用命令mvntomcat:run部署这个应用程序,我将得到正确的beans.xml。但若我在tomcat中手动部署这个应用程序的war,那个么beans.xml中似乎有一些新的bean标记,并且其中缺少一些bean标记


如果我提取这场战争并打开abc.jar的beans.xml,它似乎是正确的。我认为beans.xml在运行时会发生变化

我找到了一个解决方案,可以从jar中读取构建应用程序war文件的lib文件夹中的任何文件,这对我来说很有效

InputStream reader = null;
for (URL url : ((URLClassLoader) (Thread.currentThread()
        .getContextClassLoader())).getURLs()) {
    if (url.getPath().contains("notification-engine")) {
        String inputFile = "jar:file:" + url.getPath()
                + "!/META-INF/spring/beans.xml";
        URL inputURL = null;
        try {
            inputURL = new URL(inputFile);
            JarURLConnection conn = (JarURLConnection) inputURL
                    .openConnection();
            reader = conn.getInputStream();
        } catch (MalformedURLException e1) {
            System.err.println("Malformed input URL: " + inputURL);
        } catch (IOException e1) {
            System.err.println("IO error open connection");
        }
        break;
    }

}

它从包含通知引擎的路径(它是一个jar路径)读取/META-INF/spring/beans.xml文件。

可能是它正在使用不同的jar,而tomcat的类路径在同一路径上有bean.xml。大多数SpringJAR都有相同路径的bean.xml。首先尝试设置web inf库的类路径