xml解析请求DTD错误的解决办法(断网服务器下):org.xml.sax.SAXParseExceptionpublicId

最近我的web程序部署到一台新的服务器(这是台无法访问网络的服务器),启动时总是报解析XML错误,说某个jar包里的XML文件不可用的错误:xml] is invalid

原来这是因为解析XML文件的时候校验dtd失效,因为我的XML里对xsd文件引用都是http路径的网络资源文件,而在断网情况下http请求失败,所以导致无法下载xsd文件而无法解析xml

经过一番百度、google,终于找到可行的解决方案:把配置文件里对xsd文件的引用全改为本地的就行了
解决这个错误,看下面三个链接就够了
1、Xml解析校验引起的依赖问题
    http://blog.csdn.net/wxyfighting/article/details/8871802
2、解析xml时如何防范dtd/xsd访问外网:
    http://zhidao.baidu.com/link?url=EZTScyEaouHIGtjbUP6UIplT4ybZbttWqZk8BDVOuPAJexHDiLYTHp-BfJY-C6UJ_zMARrHTSI2tL6JLFNl5BcJ_lLRPQRCglM2Tm0chrzG
3、xml的配置文件xsi:schemaLocation无法解析导致启动失败的解决方案
    http://blog.sina.com.cn/s/blog_ed225c870101t4vh.html

引起无法解析XML的schema声明部分:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

解决方案:把XML配置文件里schema声明部分对xsd文件的引用全改为本地相对路径的:

打开jar包里面的文件,找到相应的xsd文件相对路径,如:spring-beans-3.2.13.RELEASE.jar\org\springframework\beans\factory\xml

原本的http路径:http://www.springframework.org/schema/beans/spring-beans.xsd

修改后的相对路径:classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:security="http://www.springframework.org/schema/security"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx classpath:/org/springframework/transaction/config/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop classpath:/org/springframework/aop/config/spring-aop-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/security classpath:/org/springframework/security/config/spring-security-3.0.xsd">

web程序启动时具体错误信息如下:
[ERROR] 2016-10-18 18:34:14,555 org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 1 in XML document from URL [jar:file:/apps/svr/tomcat7005-mtrip/webapps/smart-buy-center-web/WEB-INF/lib/com.llk.mmp.core-1.0.0-SNAPSHOT.jar!/META-INF/conf/spring/mmp-core-service.xml] is invalid; 
nested exception is org.xml.sax.SAXParseExceptionpublicId: -//W3C//DTD HTML 4.01//EN; systemId: http://10.24.240.88/UserCheck/PortalMain?IID=E4BD901A-9AF6-E7AF-C0DA-489A9D0F7990&origUrl=aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZA; lineNumber: 1; columnNumber: 3; 
The markup declarations contained or pointed to by the document type declaration must be well-formed.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:397)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:539)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at com.llk.mmp.core.config.spring.listener.MdpContextLoaderListener.contextInitialized(MdpContextLoaderListener.java:31)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:802)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:944)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:779)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:505)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:325)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1068)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1060)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:759)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.xml.sax.SAXParseExceptionpublicId: -//W3C//DTD HTML 4.01//EN; systemId: http://10.24.240.88/UserCheck/PortalMain?IID=E4BD901A-9AF6-E7AF-C0DA-489A9D0F7990&origUrl=aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZA; lineNumber: 1; columnNumber: 3; 
The markup declarations contained or pointed to by the document type declaration must be well-formed.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1436)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2002)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:305)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1177)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1050)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:964)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:629)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaParsingConfig.parse(SchemaParsingConfig.java:685)
at com.sun.org.apache.xerces.internal.impl.xs.opti.SchemaDOMParser.parse(SchemaDOMParser.java:530)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:2175)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.resolveSchema(XSDHandler.java:2078)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.constructTrees(XSDHandler.java:1008)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:620)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:617)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.findSchemaGrammar(XMLSchemaValidator.java:2453)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1772)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:746)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:389)
... 38 more
### 回答1: org.xml.sax.SAXException: invalid element in 是指在解析XML文档时遇到了无效的元素。在XML文档中,只有预定义的元素才是有效的,如果在解析过程中遇到了同样的元素,或者在文档中遇到了未定义的元素,就会抛出这个异常。 这个异常通常是由于以下几个原因引起的: 1. XML文档中包含了未定义的元素:在XML文件中只有预定义的元素是有效的,如果文档包含了未定义的或拼写错误的元素标签,就会抛出这个异常。 2. XML文档中存在嵌套错误:如果XML文档中的元素嵌套方式不正确,比如标签没有正确闭合或者嵌套顺序错误,就会导致解析器无法正确处理,进而抛出这个异常。 3. XML文档缺少必需的元素:XML文档可能需要某些元素来满足DTD(文档类型定义)或XML Schema规范,如果缺少了必需的元素,就会发生这个异常。 解决这个异常的方法包括: 1. 核对XML文档是否符合预定义的元素规范,检查是否存在未定义或拼写错误的元素标签。 2. 检查XML文档的嵌套结构是否正确,确保每个元素都正确地闭合并符合正确的嵌套顺序。 3. 检查XML文档是否包含了所有必需的元素,可以参考DTDXML Schema规范来确认是否缺少了必需的元素。 总之,当出现org.xml.sax.SAXException: invalid element in异常时,需要仔细检查XML文档的内容和结构,遵循XML规范,确保所有的元素都是有效的,并且符合DTDXML Schema的要求。 ### 回答2: org.xml.sax.saxexception: invalid element in 是一个 SAX 异常,表示在解析 XML 文件时遇到了无效的元素。 这个异常通常出现在使用 SAX 解析器解析 XML 文件时,当遇到无效的元素(即在 XML 文档中未定义的元素)时,就会抛出这个异常。 在 XML 中,每个元素都必须遵循其定义的规则和结构。如果解析器在解析 XML 文件时发现一个元素未被定义,就会抛出“invalid element in”异常。 为了解决这个异常,我们需要检查 XML 文件中出现的元素,确保它们都是在文档中已经定义的。可以通过查看对应的 DTD(文档类型定义)或 XML Schema 来检查定义的元素。 另外,还可以使用更具有容错性的 XML 解析器,如 DOM(文档对象模型)解析器。与 SAX 解析器不同,DOM 解析器会将整个 XML 文档加载到内存中,可以更容易地检测到无效的元素并进行处理。 总结:org.xml.sax.saxexception: invalid element in 是一个 SAX 异常,表示在解析 XML 文件时遇到了无效的元素。解决这个异常的方法是检查 XML 文件中的元素是否都已经在文档中定义,并考虑使用容错性更强的解析器。 ### 回答3: org.xml.sax.SAXException是一个常见的异常类,通常在处理XML文档时遇到问题时会抛出该异常。在这个异常信息中,我们看到了"invalid element"的字样。 "invalid element"的意思是无效元素,也就是说,XML文档中包含了一个不被允许的或者无法解析的元素。 在处理XML文档时,通常需要遵循一定的规范,比如使用DTD(文档类型定义)或者XML Schema来定义XML文档的结构和元素。如果XML文档中包含了未定义的元素,或者元素的位置不正确,就会抛出该异常。 要解决这个异常,我们需要检查XML文档中的元素是否符合规范。首先,可以查看异常信息中提供的具体元素名称,找到这个无效元素在XML文档中的位置。然后,我们可以参考XML文档的定义,检查这个元素是否被正确定义,或者是否放置在正确的位置。 如果元素在XML文档中是合法的,那可能是因为解析器无法正确解析该元素。这种情况下,我们可以尝试使用其他的解析器,或者更新现有的解析器,以确保能够正常解析该元素。 总之,当我们遇到"org.xml.sax.SAXException: invalid element"这个异常时,就意味着XML文档中存在不被允许或者无法解析的元素。我们需要仔细检查这个元素是否在XML文档定义中被正确定义或者是否放置在正确的位置,并尝试使用其他解析器或更新现有解析器来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值