Мне было интересно, может ли кто-нибудь указать мне правильное направление здесь.
Я работаю над проектом, который должен создать функциональность веб-сервиса, чтобы соответствовать спецификации 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>
Спасибо за чей-либо вклад заранее, не уверен, сталкивался ли кто-нибудь с такой проблемой или нет.
Дамиан