0

現在、Spring-ws を使用して Web サービスを実装しています。ここで私は xsd validation に打たれました。xsd検証のために、私は次の構成を使用しています

    <bean id="validatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
        <property name="xsdSchema" ref="schema" />
        <property name="validateRequest" value="true" />
        <property name="validateResponse" value="true" />
      </bean>

<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema">
    <property name="xsd" value="/WEB-INF/ProductSchema.xsd" />
  </bean>

ここでは、Bean の初期化中に xsd ファイルを渡しています。この (ProductSchema.xsd) xsd ファイルを動的に送信する方法はありますか。入力ペイロードに基づいて、どの xsd ファイルを送信する必要があるかがわかるためです。

私を助けてください。前もって感謝します

4

2 に答える 2

0

あなたが何をしようとしているのかよくわかりません。

ただし、ペイロード内の要素の名前に一致する localPart でハンドラー メソッドに注釈を付けることで、さまざまなペイロードに一致するさまざまなエンドポイント/メソッドを作成できます。

@Endpoint
public class MyEndpoint {

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "NameOfMyXmlRequestElement")     
    @ResponsePayload
    public MyResponse handleMyRequest(@RequestPayload MyRequest MyRequest) throws Exception {
    ...

受け取ったリクエストは、特定のスキーマを使用して非整列化/検証できます。

<bean id="myJaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>mydomain.model.oxm.MyRequest</value>
            <value>mydomain.model.oxm.MyResponse</value>
        </list>
    </property>
    <property name="schema" ref="MyServiceSchema" />
</bean>

<bean id="MyServiceSchema" class="org.springframework.core.io.ClassPathResource">
    <constructor-arg value="WEB-INF/schemas/MyService.xsd" />
</bean>

MyRequest クラスは、Jaxb2marshaller、@XmlRootElement(name="MyRequest") などで動作するように注釈を付ける必要があります...

于 2012-08-07T08:23:38.497 に答える
0

XSD がいくつあるかはわかりませんが、おそらく ProductSchema.xsd でインポートを定義して、他のものを含めることができます。それが少なくとも私が設定した方法です。

例えば:

<import namespace="http://namespace" schemaLocation="data.xsd" />
于 2012-07-02T14:09:44.847 に答える