Дублированное определение для: 'identifType' - PullRequest
14 голосов
/ 15 февраля 2011

У меня есть веб-приложение, в котором я использую Spring 3.0 и файл jracle com.oracle.xdb, связанный с XMLTPE, который, в свою очередь, зависит от com.oracle.xml.xmlparserv2, и я уверен, что большинство из вас знают об исключении, которое возникает приэти банки используются с пружиной 3.0, как показано ниже,

. Вызывается: oracle.xml.parser.schema.XSDException: Дублированное определение для: 'identifType'

некоторые предложения использовать другой синтаксический анализатор, такой как xerces, но в нашем случае, поскольку мы используем зависимость xdb, похоже, что мы не можем изменить его для использования другого синтаксического анализатора, кроме com.oracle.xml.xmlparserv2, он работал нормально с пружиной 2.5.6 есть ли какая-нибудь информация о том, когда это будет исправлено либо spring / oracle?

Ответы [ 6 ]

13 голосов
/ 11 мая 2012

Вместо изменения xmlparserv2.jar вы можете добавить

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

Нажмите здесь , чтобы прочитать сообщение на форумах Oracle, посвященное этой проблеме.

5 голосов
/ 14 марта 2012

Удалить каталог / META-INF / services из xmlparserv2.jar - это содержимое регистрирует парсер Oracle.

5 голосов
/ 23 ноября 2011

Я обнаружил, что проблема связана с тем, что xmlparserv2 может правильно проанализировать атрибут xsi:schemaLocation.

Я проверил, работает ли он:Ошибка:

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"

Обходной путь - исключить использование определенных пространств имен (таких как tx, util ..) и заменить их эквивалентными определениями, используя обычные bean-компоненты.Например, вы можете заменить <tx:annotation-driven/> на <bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>

3 голосов
/ 17 августа 2013

Шаг 4 из Мой ответ здесь объясняет, почему это происходит, и несколько способов исправить это.

1 голос
/ 04 декабря 2015
  1. Согласованное управление версиямиschema/beans/spring-beans**-3.1**.xsd schema/jee/spring-jee**-3.1**.xsd schema/mvc/spring-mvc**-3.1**.xsdи т.п.

  2. Порядок важен. spring-jee-3.1.xsd до spring-beans-3.1.xsd вызывает ошибку, поскольку в файле spring-jee-3.1.xsd есть ссылка на импорт для spring-beans-3.1.xsd

0 голосов
/ 16 февраля 2016

Если в схемы есть импорт в один и тот же XSD, следует также импортировать этот XSD, чтобы предотвратить ошибку «дублированного определения».

Например: У меня есть три схемы:

http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/util/spring-util-4.2.xsd
http://www.springframework.org/schema/jee/spring-jee-4.2.xsd

Теперь я получаю ошибку, потому что у spring-util и spring-jee есть импорт в:

<xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"/>
<xsd:import namespace="http://www.springframework.org/schema/tool" schemaLocation="http://www.springframework.org/schema/tool/spring-tool-4.2.xsd"/>

Когда пружинный инструмент будет импортирован вручную ДО Spring-Util и Spring-Jee:

http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/tool/spring-tool-4.2.xsd
http://www.springframework.org/schema/util/spring-util-4.2.xsd
http://www.springframework.org/schema/jee/spring-jee-4.2.xsd

Конфигурация XML будет правильно проанализирована.

Очевидно, у вас должны быть согласованные версии.

Небольшой обходной путь - определить некоторую часть конфигурации в других файлах с описанными различными схемами и импортировать ее, используя:

<import resource="part_of_config.xml"/>
...