Xsd Spring ws验证具有多个导入到同一命名空间的模式

Xsd Spring ws验证具有多个导入到同一命名空间的模式,xsd,spring-ws,xml-validation,Xsd,Spring Ws,Xml Validation,我在XSD中定义了许多必需的soap头,不允许更改这些头,因为现有客户机已经在生产中使用这些头了 在其中一个模式中,有许多具有相同名称空间值的导入。当我尝试将这个模式加载到我的验证拦截器时,我得到一个异常,表明sdsd:SystemName(序列中的第二个元素)未定义。 如果我在IntelliJ Idea 13中打开XSD,我会得到sdsd:SystemName和元素列表其余部分的红色标记。仅找到并加载sdsd:SystemOwnerName <?xml version="1.0" enc

我在XSD中定义了许多必需的soap头,不允许更改这些头,因为现有客户机已经在生产中使用这些头了

在其中一个模式中,有许多具有相同名称空间值的导入。当我尝试将这个模式加载到我的验证拦截器时,我得到一个异常,表明sdsd:SystemName(序列中的第二个元素)未定义。 如果我在IntelliJ Idea 13中打开XSD,我会得到sdsd:SystemName和元素列表其余部分的红色标记。仅找到并加载sdsd:SystemOwnerName

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:sdsd="http://www.sdsd.dk/dgws/2010/08" xmlns:sdsd201206="http://www.sdsd.dk/dgws/2012/06" targetNamespace="http://www.sdsd.dk/dgws/2012/06" elementFormDefault="qualified" attributeFormDefault="unqualified">
<import namespace="http://www.sdsd.dk/dgws/2010/08" schemaLocation="../../2010/08/SystemOwnerName.xsd" />
<import namespace="http://www.sdsd.dk/dgws/2010/08" schemaLocation="../../2010/08/SystemName.xsd" />
<import namespace="http://www.sdsd.dk/dgws/2010/08" schemaLocation="../../2010/08/SystemVersion.xsd" />
<import namespace="http://www.sdsd.dk/dgws/2010/08" schemaLocation="../../2010/08/OrgResponsibleName.xsd" />
<import namespace="http://www.sdsd.dk/dgws/2010/08" schemaLocation="../../2010/08/OrgUsingName.xsd" />
<import namespace="http://www.sdsd.dk/dgws/2010/08" schemaLocation="../../2010/08/OrgUsingID.xsd" />
<import namespace="http://www.sdsd.dk/dgws/2010/08" schemaLocation="../../2010/08/RequestedRole.xsd" />

<element name="WhitelistingHeader" type="sdsd201206:WhitelistingHeader">
    <annotation>
        <documentation xml:lang="en-GB">SDSD Whitelisting header.</documentation>
        <documentation xml:lang="da-DK">SDSD Whitelisting header.</documentation>
    </annotation>
</element>
<complexType name="WhitelistingHeader">
    <sequence>
       <element ref="sdsd:SystemOwnerName" minOccurs="1" maxOccurs="1" />
       <element ref="sdsd:SystemName" minOccurs="1" maxOccurs="1" />
       <element ref="sdsd:SystemVersion" minOccurs="1" maxOccurs="1" />
       <element ref="sdsd:OrgResponsibleName" minOccurs="1" maxOccurs="1" />
       <element ref="sdsd:OrgUsingName" minOccurs="1" maxOccurs="1" />
       <element ref="sdsd:OrgUsingID" minOccurs="1" maxOccurs="1" />
       <element ref="sdsd:RequestedRole" minOccurs="1" maxOccurs="1" />
    </sequence>
</complexType>

并且可以确认,如果我创建了一个新的“主”模式,其中包含在上面显示的模式中导入的模式,然后将上面显示的模式中的导入更改为“主”模式的单个包含,那么我的Spring ws-validation拦截器工作正常

但是,由于更改模式不是一个选项,我正在寻找其他选项

我找到了Xerces文档,并建议可以在XmlSchemaFactory上将特性“”设置为true,以便在验证具有多个导入到同一命名空间的架构时,Xerces不会失败。但是,我有自己的SoapHeaderValidatingInterceptor,它扩展了AbstractValidatingInterceptor,后者反过来使用SpringWS内部XmlValidatorFactory创建用于验证XSD的XmlValidator


关于如何启用handle multiple imports功能的任何提示都将不胜感激。

您说您不能编写一个包含所有内容的新模式文档,因为“更改模式不是一个选项”——但新模式文档“更改模式”在什么意义上?所有现有的模式文档都是完全未被触及和更改的。我意识到,在XML方面,使用修改后的模式的结果是相同的,就验证而言,最终结果是完全有效的。但是,如果我创建了一个修改过的WhitelistingHeader模式,那么我的开发团队将必须维护该文件,并使其与我们从客户那里收到的对原始WhitelistingHeader模式所做的任何更改保持同步。更改并不频繁,但如果可能的话,我们真的希望避免仅为此目的而对模式进行局部修改。这是我们目前使用的解决方案,但如果可能,我们希望使用交付给我们的模式。您似乎使用“模式”一词表示“模式文档”,使用“修改”一词表示“新创建”;这使我很难相信我理解你的意思。祝你好运