【问题标题】:Hibernate 5.4.x Caused by: org.hibernate.boot.MappingException: Error accessing stax stream : origin(null)Hibernate 5.4.x 引起:org.hibernate.boot.MappingException:访问 stax 流时出错:origin(null)
【发布时间】:2019-06-28 04:31:53
【问题描述】:

我使用休眠 5.4.1。一切正常,直到 2019 年 6 月 28 日无法启动服务。

Caused by: org.hibernate.boot.InvalidMappingException: Could not parse mapping document: null (INPUT_STREAM)
    at org.hibernate.boot.jaxb.internal.InputStreamXmlSource.doBind(InputStreamXmlSource.java:46)
    at org.hibernate.boot.jaxb.internal.InputStreamXmlSource.doBind(InputStreamXmlSource.java:38)
    at org.hibernate.boot.spi.XmlMappingBinderAccess.bind(XmlMappingBinderAccess.java:94)
    at org.hibernate.boot.MetadataSources.addInputStream(MetadataSources.java:382)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:475)
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:508)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741)
    ... 68 more
Caused by: org.hibernate.boot.MappingException: Error accessing stax stream : origin(null)
    at org.hibernate.boot.jaxb.internal.AbstractBinder.seekRootElementStartEvent(AbstractBinder.java:141)
    at org.hibernate.boot.jaxb.internal.AbstractBinder.doBind(AbstractBinder.java:101)
    at org.hibernate.boot.jaxb.internal.AbstractBinder.bind(AbstractBinder.java:57)
    at org.hibernate.boot.jaxb.internal.InputStreamXmlSource.doBind(InputStreamXmlSource.java:43)
    ... 75 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2]
Message: The markup declarations contained or pointed to by the document type declaration must be well-formed.
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:601)
    at com.sun.xml.internal.stream.XMLEventReaderImpl.peek(XMLEventReaderImpl.java:276)
    at javax.xml.stream.util.EventReaderDelegate.peek(EventReaderDelegate.java:104)
    at org.hibernate.boot.jaxb.internal.stax.BufferedXMLEventReader.peek(BufferedXMLEventReader.java:96)
    at org.hibernate.boot.jaxb.internal.AbstractBinder.seekRootElementStartEvent(AbstractBinder.java:137)
    ... 78 more

【问题讨论】:

  • 无论您尝试解析何种 XML 和/或相关的 DTD 格式不正确。 The markup declarations contained or pointed to by the document type declaration must be well-formed.

标签: java hibernate


【解决方案1】:

我终于找到了根本原因。 Hibernate 更新 dtd file 于 2019 年 6 月 27 日。似乎更新的文件 hibernate-mapping.dtd 与以前的版本不相比较。

在我的休眠实体映射 *.hbm.xml 之前使用:

"http://hibernate.org/dtd/hibernate-mapping.dtd">

修复后,改为波纹管,就可以了:

"https://hibernate.org/dtd/hibernate-mapping-3.0.dtd">

【讨论】:

    【解决方案2】:

    我昨天维护的基于休眠的服务出现了一个非常相似的问题。该服务自 2017 年以来一直运行顺利(此后未进行过修改),但在 2019 年 6 月 28 日突然开始失败,并出现以下错误:

    Caused by: org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 26; Element type "hibernate-configuration" must be declared.
    

    我的休眠配置文件中的 DOCTYPE 块如下所示:

    <!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://www.hibernate.org/dtd//hibernate-configuration-3.0.dtd">
    

    由于我不完全理解的原因,删除 DTD URL 中多余的斜杠字符解决了问题:

    <!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
      "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    

    我猜我们的两个问题都是由于 hibernate.org 提供这些 DTD 文件的方式发生了一些不寻常的变化。

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2016-04-04
      • 2019-01-02
      • 2016-10-01
      • 1970-01-01
      • 2021-04-17
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多