spring 項目啟動報錯 報錯日志如下:
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 1 in XML document from URL [jar:file:webapps/ROOT/WEB-INF/lib/xxx-biz-1.0.jar!/xxx/sponsor-group-pipeline.xml] is invalid; nested exception is org.xml.sax.SAXParseException; systemId: http://www.xxx.com/schema/hipac/pipeline.xsd; lineNumber: 1; columnNumber: 50; White spaces are required between publicId and systemId.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399) ~[spring-beans-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) ~[spring-beans-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304) ~[spring-beans-4.1.9.RELEASE.jar:4.1.9.RELEASE]
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:245) ~[spring-beans-4.1.9.RELEASE.jar:4.1.9.RELEASE]
... 54 common frames omitted
Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) ~[na:1.8.0_45]
google了很久,基本都是說 xml頭定義的 systemId和publicId之間要有空格,也就是這一坨内容
<?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:hipac="http://www.xxx.com/schema/hipac"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.xxx.com/schema/hipac http://www.xxx.com/schema/hipac/pipeline.xsd">
就是上面紅色的部分,可以看出來實際上我的配置是沒有問題的 那問題是出在哪裡呢,剛開始一直在懷疑jar包沖突的問題,但是排查了很久,和其它正常的應用也對比了很多jar版本,都沒有發現問題 由于這具scheam是我自己定義的,所有在spring中有一個對應的配置解析,就是spring.handlers和spring.schemas兩個檔案,我們看下這兩個檔案的内容 spring.handlers
http\://www.xxx.com/schema/hipac=com.xxx.engine.choreography.pipeline.namespace.EngineNamespaceHandler
spring.schemas
http\://www.xxx.com/schema/hipac/pipeline.xsd=com/xxx/engine/choreography/pipeline/xsd/pipeline.xsd
這兩個檔案一個是指定了xsd的路徑,一個是schemas的解析類,懷疑是這兩個檔案加載有問題 是以在接入的應用代碼中搜了下這兩個檔案,發現應用中居然也有這兩個配置檔案,而且内容也是差不多(隻是值不同,而且在代碼中還找不到對應的類和xsd),到這裡就很懷疑了,大機率是這裡的問題。 接下來馬上把這兩個檔案删除,再部署一遍,OK,順利成功。 經過這個問題後,讓我想起來之前另一個應用剛接入時也是出現過這種情況,但是忘記當時是怎麼解決的了,現在回想起來了,實際上是當時的配置檔案中的類路徑或者xsd路徑寫錯了導緻的。 不過,spring啟動的提示也是坑啊,太誤導人了,一直以為是引用的配置檔案的問題,浪費了大量時間,回頭要好好看下spring對sechemas的解析。
轉載于:https://www.cnblogs.com/yissheng/p/11494854.html