在一种情况下SAXParseException,但在使用相同的xml时不在另一种情况下

时间:2016-04-29 15:48:09

标签: java xml servlets xml-parsing

这是我在这里的第一个问题所以请告诉我任何遗漏的内容,以便我可以添加它。

现在,我们有一个使用tomcat 7的部署,我们有5个servlet修改SQLServer DB中的一些数据,基于从5个.jar(每个servlet一个)读取的几个.XML以及所有这些。 jar是由.war发起的,我正在尝试修改它,因此它不再作为servlet工作,你可以在本地运行修改。

我在两种情况下都有相同的配置(通过tomcat和我的本地“run.bat”),并且它们都使用相同的lib来读取文件,所以其中一个人没有机会读取.XML未经验证,但在本地场景中,我得到“org.xml.sax.SAXParseException:prolog中不允许内容”

这是产生问题的行(“file”是文件的路径):

    public void procesarArchivo(String file) throws SAXException, IOException, SAXException {
        xr.parse(new InputSource(new StringReader(leerXML(file))));
        /* i do stuff here*/
    }

    public String leerXML(String XMLName) {
        String line = "";
        StringBuffer sb = new StringBuffer();
        try {
            InputStream is = this.getClass().getClassLoader().getResourceAsStream(XMLName);
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while ((line = br.readLine()) != null) {
                sb.append(line).append("\n");
            }
            br.close();
            is.close();
        } catch (Exception e) {
            sb.append(e.getMessage());
        }
        return sb.toString();
    }

这里有servlet .log文件,可以正常工作:

INFO  [Thread-1  ] - [[Cargando_reglas_del_sistema]]...
DEBUG [Thread-1  ] - [[Procesando_Archivo]]: com/systech/reglas/xml/reglas_0.xml
DEBUG [Thread-1  ] - [[Leyendo_regla]]: CTRLDOCURE.sql
/*... and so on with all the .sql*/

在这里你可以看到本地的.log文件(使用与以前相同的库)和错误,当它说“procesando archivo”意味着找到了文件,但它尝试读取它:

INFO  [main   ] - [[Cargando_reglas_del_sistema]]...
DEBUG [main   ] - Procesando Archivo: com/systech/reglas/xml/reglas_0.xml
ERROR [main   ] - org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; El contenido no está permitido en el prólogo.

我不明白为什么其中一个有效,而另一个则无法执行相同的代码。

任何帮助都将受到赞赏,并为可怜的英语感到抱歉

1 个答案:

答案 0 :(得分:0)

我仍然不太清楚为什么,但这就是答案:

我有一个包含以下参数的配置文件:

double total = prices.stream()
                     .mapToDouble(price -> price.cost + price.tax)
                     .sum();

显然第一个没有正常工作,它找到了文件,但有一些错误,我改变了:

resReglas=./wardir/WEB-INF/lib/reglas.jar
resVistas=./wardir/WEB-INF/lib/vistas.jar

为此:

String reglasJar =props.getProperty("resReglas");

它有效!