1

ここで誰かが私を正しい方向に向けることができるかどうか疑問に思っていました.

SPML v2 仕様 (https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=provision) に準拠する Web サービス機能を作成する必要があるプロジェクトに取り組んでいます。サービスをプロビジョニングするための XML ベースの仕様です。

SOAP リクエストの名前空間とローカル部分にマップするエンド ポイントを作成しました。私の問題は、仕様自体から提供された XSD を使用して、Spring Web サービスでペイロード リクエストを検証しようとすることにあります。私の調査によると、これは「オープン コンテンツ モデル」であり、検証や XSD のコンパイルを試みると、Unique Particle Attribution エラーが発生します。

これは、CORE XSD に「ExtensibleType」complexType があり、それから他の 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 (または要素それらの置換グループ) は、「固有粒子の帰属」に違反しています。このスキーマに対する検証中に、これら 2 つの粒子に対してあいまいさが生じます。

XSD 自体が無効であるため、仕様自体によって提供される XSDS に対してペイロード要求を実際に検証する方法を理解するのにかなりの時間を費やしています。

Spring コンテキスト ファイルに 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>

誰かがこの種の問題に遭遇したことがあるかどうかはわかりませんが、事前に誰かの意見をお寄せいただきありがとうございます。

ダミアン

4

1 に答える 1

0

あなたがする必要があるのは、Unique Particle Attribution チェックを無効にすることです。一般に、これは Java で機能します (このSO 投稿を参照)。それを構成する方法を見つける必要があるだけです...最悪の場合は、上記のリンクに基づいて独自のバリデーターを構築することです。Spring の XSD スキーマはApache の実装を使用します。

于 2013-01-08T15:35:24.437 に答える