重复定义:'identifiedType'

时间:2011-02-15 15:50:50

标签: xml oracle spring types jar

我有一个Web应用程序,我使用的是spring 3.0和oracle的XMLTYPE相关jar的com.oracle.xdb,后者依赖于com.oracle.xml.xmlparserv2,我相信大多数人都知道你得到的异常这些罐子与春季3.0一起使用,如下所示,

  

引起:oracle.xml.parser.schema.XSDException:重复定义:'identifiedType'

有一些建议使用不同的解析器,如xerces,但在我们的情况下,因为我们使用xdb依赖项,看起来我们无法将其更改为使用除com.oracle.xml.xmlparserv2之外的其他解析器,它正在工作弹簧2.5.6是否有任何关于何时可以通过spring / oracle修复的信息?

6 个答案:

答案 0 :(得分:13)

您可以添加

,而不是修改xmlparserv2.jar

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

Click here阅读Oracle论坛上关于该问题的帖子。

答案 1 :(得分:5)

我发现问题是由于xmlparserv2的吸入能够适当地解析xsi:schemaLocation属性。

我已经检查过这是有效的:

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

虽然这会产生错误:

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"/>

答案 2 :(得分:5)

从xmlparserv2.jar中删除/ META-INF / services目录 - 它的内容注册了Oracle的解析器。

答案 3 :(得分:3)

my answer here

第4步解释了为什么会发生以及修复它的几种方法。

答案 4 :(得分:1)

  1. 一致的版本控制 schema/beans/spring-beans**-3.1**.xsd schema/jee/spring-jee**-3.1**.xsd schema/mvc/spring-mvc**-3.1**.xsd
    等。

  2. 订单很重要。 spring-beans-3.1.xsd 之前的 spring-jee-3.1.xsd 会导致错误,因为在spring-jee-3.1.xsd文件中我们有一个对spring的导入引用 - 豆-3.1.xsd

答案 5 :(得分:0)

如果模式导入到同一个XSD,您也应该导入该XSD以防止&#34;重复定义&#34;错误。

例如: 我有三个模式:

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"/>