Как я могу проверить запросы SPML SOAP в Spring Web Services, если их XSD имеют уникальные ошибки приписывания частиц?

Мне было интересно, если кто-нибудь может указать мне в правильном направлении здесь.

Я работаю над проектом, который должен создать функциональность веб-службы для соответствия спецификации SPML v2 (https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=provision). Это спецификация на основе XML для предоставления услуг.

Я создал конечные точки, которые сопоставляются с пространством имен и локальной частью запросов мыла. Моя проблема заключается в попытке проверить запросы полезной нагрузки в весенних веб-сервисах, используя предоставленные XSD из самой спецификации. По моим исследованиям, это "Модель открытого содержимого", и любая проверка или попытка скомпилировать XSD приводят к ошибкам уникальной атрибуции частиц.

Это происходит из-за того, что CORE XSD имеет complexType "ExtensibleType", который, когда другие complexTypes расширяются, вызывает ошибку. Из моего исследования я могу понять, почему происходит ошибка, но я не хочу изменять xsds, предоставляемые самой спецификацией.

Пример:

<complexType name="ExtensibleType">
    <sequence>
        <any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </sequence>
    <anyAttribute namespace="##other" processContents="lax"/>
</complexType>



<complexType name="SearchQueryType">
    <complexContent>
        <extension base="spml:ExtensibleType">  
            <sequence>
                <annotation>
                    <documentation>Open content is one or more instances of QueryClauseType (including SelectionType) or LogicalOperator.</documentation>
                </annotation>

                <element name="basePsoID" type="spml:PSOIdentifierType"  minOccurs="0" />
            </sequence>
            <attribute name="targetID" type="string" use="optional"/>
            <attribute name="scope" type="spmlsearch:ScopeType" use="optional"/>
        </extension>
    </complexContent>               
</complexType>

Это приведет к следующей ошибке при попытке проверить xsds:

cos-nonambig: WC [## other: "urn: oasis: names: tc: SPML: 2: 0"] и "urn:oasis:names:tc:SPML: 2:0:search":basePsoID (или элементы из их группа замещения) нарушают "Уникальную атрибуцию частиц". Во время проверки по этой схеме, неопределенность будет создана для этих двух частиц.

Поскольку XSD сами по себе недействительны, мне не хватает времени, чтобы выяснить, как я могу на самом деле проверять запросы полезной нагрузки по XSDS, предоставленной самой спецификацией.

Добавление PayloadValidatingInterceptor в весенний контекстный файл приводит к той же ошибке, когда сервер пытается запустить:

    <bean id="validatingInterceptor"
            class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
<property name="schemas">
                <list>
                    <value>/WEB-INF/xsd/spml/pstc_spmlv2_core.xsd</value>
                    <value>/WEB-INF/xsd/spml/pstc_spmlv2_search.xsd</value>
                </list>
            </property>
            <property name="validateRequest" value="true"/>
            <property name="validateResponse" value="false"/>
        </bean>

Спасибо за чей-либо вклад заранее, не уверен, сталкивался ли кто-нибудь с этим типом проблемы или нет.

Damian

1 ответ

Решение

Что вам нужно сделать, это отключить проверку уникальной атрибуции частиц. В общем, это работает в Java (см. Этот пост SO), вам просто нужно найти способ его настроить... В худшем случае может быть создание собственного валидатора на основе вышеуказанной ссылки - он должен работать, так как схемы Spring XSD используя реализацию Apache.

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