org.xml.sax.SAXParseException:cvc-elt.1:找不到元素'server'的声明

时间:2019-03-05 02:39:36

标签: dom java-8 xml-parsing sax

我正在尝试找出当前无法解析的XML文件的生成问题-但仅当使用IBM Java 8生成时才可以解析。使用Redhat的Java 8生成时可以解析。 两者之间的区别在于,RedHat实现在xml声明之后和每个命名空间声明之后都有换行符,而IBM实现则没有。

这是有效的标头(使用Redhat Java生成):

<?xml version="1.0" encoding="UTF-8"?>
<server id="myServer" max-logins="100"
    xmlns="http://mina.apache.org/ftpserver/spring/v1"
   xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd">
   <listeners>
      <nio-listener name="default" port="21">

如您所见,顶部的xml声明后有一个换行符,以及服务器标记中的每个xmlns属性。

这是使用IBM Java 8从同一代码生成的标头:

<?xml version="1.0" encoding="UTF-8"?><server id="myServer" max-logins="100" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd">
   <listeners>
      <nio-listener name="default" port="21">

在这种情况下,直到第一个子标记(侦听器)都没有换行符。

不幸的是,第二种情况导致Spring使用的Sax解析器发生异常。

这是堆栈跟踪:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 1 in XML document from file [C:\xxxx\image-server\.\res\conf\temp.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'server'.
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
        at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:80)
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
        at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
        at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
        at org.apache.ftpserver.main.CommandLine.getConfiguration(CommandLine.java:164)

生成XML的实际文件是org.w3c.dom.DOMConfiguration。我认为这已包含在rt.jar中,但尚未确认。

有什么想法可以解决这个问题吗?我可以手动将换行符插入到文件中,但是我不确定这是否容易,也不是最佳解决方案。

更新:IBM的类加载器说它来自Java:

class load: org/w3c/dom/DOMConfiguration from: C:\javaInstalls\ibm_sdk80\jre\lib\xml.jar

我想知道是否有一种方法可以使用自定义类加载器从另一个jar中加载org.w3c类?

0 个答案:

没有答案