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

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

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

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

Это происходит из-за того, что CORE XSD имеет комплексный тип «ExtensibleType», который, когда другие сложные типы расширяются от него, вызывает ошибку. Из моего исследования я понимаю, почему возникает ошибка, но я не хочу изменять 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 в файл контекста spring приводит к той же ошибке при попытке запуска сервера:

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

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

Дамиан


person Damian    schedule 08.01.2013    source источник


Ответы (1)


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

person Petru Gardea    schedule 08.01.2013
comment
Благодаря Петру, с помощью расширения/создания некоторых дополнительных классов я смог перейти к разделу кода, который создал класс SchemaFactory, и установить для этой функции значение false ( schemaFactory.setFeature(apache.org/xml/features/validation/schema-full-checking, false); ). - person Damian; 10.01.2013