Spring 5 смешивает версионные и неверсионные схемы из-за сторонней библиотеки java

Недавно я перенес код из Spring 4 (4.1.7) в Spring 5(5.1.4).

Во время этой весенней миграции я удалил номера версий из Spring Xmls проекта, и это xml-схема из библиотеки, которую я не могу обновить:

<?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:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd"
    default-lazy-init="true"
    >

После обновления ниже Exception при загрузке определений bean-компонентов из-за библиотеки XML, которую я привел выше:

Вызвано: org.xml.sax.SAXParseException; lineNumber: XX; columnNumber: XX;: XML-24500: (Ошибка) Невозможно построить схему http://www.springframework.org/schema/context, расположенную по адресу http://www.springframework.org/schema/context/spring-context-3.1.xsd'

Подробная трассировка стека:

Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 16 in XML document from class path resource [xxxlib-core-spring-main.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 16; columnNumber: 5; <Line 16, Column 5>: XML-24500: (Error) Can not build schema 'http://www.springframework.org/schema/context' located at 'http://www.springframework.org/schema/context/spring-context-3.1.xsd'
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:257)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:128)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:133)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:622)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:518)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:95)
    at com.xxxxxxxx.dataaccess.xxx.util.SpringHelper.init(SpringHelper.java:41)
    at com.xxxxxxxx.dataaccess.xxx.util.SpringHelper.getBean(SpringHelper.java:69)
    at com.xxxxxxxx.dataaccess.xxx.api.xxxAPILoader.<clinit>(xxxAPILoader.java:339)
    ... 30 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 16; columnNumber: 5; <Line 16, Column 5>: XML-24500: (Error) Can not build schema 'http://www.springframework.org/schema/context' located at 'http://www.springframework.org/schema/context/spring-context-3.1.xsd'
    at oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:428)
    at oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:290)
    at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:425)
    at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:242)
    at oracle.xml.jaxp.JXDocumentBuilder.parse(JXDocumentBuilder.java:175)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:77)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:434)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)
    ... 46 more
Caused by: oracle.xml.parser.schema.XSDException: Duplicated definition for: 'identifiedType'
    at oracle.xml.parser.schema.XSDBuilder.buildSchema(XSDBuilder.java:1122)
    at oracle.xml.parser.schema.XSDBuilder.build(XSDBuilder.java:673)
    at oracle.xml.parser.schema.XSDValidator.processSchemaLocation(XSDValidator.java:1063)
    at oracle.xml.parser.schema.XSDValidator.startElement(XSDValidator.java:668)
    at oracle.xml.parser.v2.NonValidatingParser.parseElement(NonValidatingParser.java:1635)
    at oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:458)
    at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:404)
  1. Означает ли это, что мы можем перейти на Spring 5, только если все наши библиотеки также будут на Spring 5? (Не могу поверить, что весна может создать такую ​​проблему)
  2. Есть ли способ решения этой проблемы?
  3. Мне не хватает какой-то конфигурации из-за этого исключения

Я столкнулся с проблемой github, которая предполагает, что весной 5 версия удалена, но старые версии все еще поддерживаются.

Edit1:

Я столкнулся с другим вопросом: поскольку я также использую xmlparserv2-12.1.0.2.jar после использования нижеприведенного обходного пути (похоже), похоже, что это исключение проходит (XSDException: дублированное определение для: 'identifyType'), но все еще не удается загрузить bean из библиотеки, теперь он выдает Exception org.springframework.beans.factory.NoSuchBeanDefinitionException

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

Edit2:

Выше Edit1 решает мою проблему, исключение bean было моей проблемой локальной настройки. Я нашел еще один хороший ответ, в котором говорится, что мы не можем смешивать неверсированные и версионные схемы. Но в моем случае я не могу удалить номер версии из сторонней библиотеки, в этом случае мне придется использовать решение, указанное в Edit1, хотя это выглядит плохим взломом.

Есть ли другой лучший способ решить эту проблему?

0 ответов

Другие вопросы по тегам