zoukankan      html  css  js  c++  java
  • spring 自定义schema 加载异常 White spaces are required between publicId and systemId.

    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的解析。 
  • 相关阅读:
    最大流模板
    大数相加
    . Number throry
    掷骰子 dp
    Java常用类库2
    简单注册功能(未连接数据库)
    Java常用类库
    人机猜拳
    租车系统
    Java一些概念
  • 原文地址:https://www.cnblogs.com/yissheng/p/11494854.html
Copyright © 2011-2022 走看看