0

PayloadRootとSoapActionの両方を使用するWebサービスがあるSpringアプリケーションがあります。これで、webservice-ws-context.xmlで次のコードを構成しました。

<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">
        <property name="interceptors">
            <list>
                <bean class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor"/>
                <bean id="validatingInterceptor"  class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
                    <property name="schema" value="classpath:/xsd/common.xsd"/>
                    <property name="validateRequest" value="${uiconnect.ws.payload.validate.request}"/>
                    <property name="validateResponse" value="${uiconnect.ws.payload.validate.response}"/>
                </bean>
            </list>
</property>
</bean>

ここで、soapアクションのコードを追加したいのですが、次のコードを追加すると機能しません。したがって、このBeanに「id」属性を指定し、特定のWebサービス用にこのビンを構成する方法を説明します。または、これを構成する他の方法はありますか?カスタムエンドポイントマッピングを作成しようとしましたが、これに関するヘルプは利用できません。

<bean class="org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping">
        <property name="interceptors">
            <list>
                <bean class="org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor"/>
                <bean id="validatingInterceptor"  class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
                    <property name="schema" value="classpath:/xsd/common.xsd"/>
                    <property name="validateRequest" value="${uiconnect.ws.payload.validate.request}"/>
                    <property name="validateResponse" value="${uiconnect.ws.payload.validate.response}"/>
                </bean>
            </list>
        </property>
    </bean>
4

1 に答える 1

1

構成する簡単な方法は、Spring-WSが提供するカスタム名前空間を使用することです。

最初にコンポーネントをスキャンして、@Endpointの注釈付きBeanが見つかったことを確認します。

<context:component-scan base-package="..." />

以下は内部的にとを登録しPayloadRootAnnotationMethodEndpointMappingますSoapActionAnnotationMethodEndpointMapping

<sws:annotation-driven  /> 

インターセプターを登録するには:

<sws:interceptors>
    <bean id="validatingInterceptor"  class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
        <property name="schema" value="classpath:/xsd/common.xsd"/>
        <property name="validateRequest" value="${uiconnect.ws.payload.validate.request}"/>
        <property name="validateResponse" value="${uiconnect.ws.payload.validate.response}"/>
    </bean>
    <sws:payloadRoot namespaceUri="....">
        <bean class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor"/>
    </sws:payloadRoot>
    <sws:soapAction value="...">
        <bean class="org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor"/>
    </sws:soapAction>
</sws:interceptors>**
于 2012-10-01T12:36:51.920 に答える