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的解析。 
  • 相关阅读:
    频繁FGC解决方案
    ThreadLocal
    Session与Cookie
    Socket通信流程
    SpringBoot面试题
    面向对象3大特性:封装、继承、多态——继承(继承方法的重写和初始化顺序、final & super关键字、Object类)
    面向对象3大特性:封装、继承、多态——封装(this 、访问修饰符、内部类)
    java类和对象、构造方法、静态变量、静态方法、静态初始化块
    数组的使用、eclipse调试程序、练习小demo以及方法的定义和重载
    java中的条件语句if...else... switch 和循环语句while do...while for
  • 原文地址:https://www.cnblogs.com/yissheng/p/11494854.html
Copyright © 2011-2022 走看看