簡體   English   中英

需要在單個應用程序中同時使用@soapaction和@PayloadRoot

[英]need to use both @soapaction and @PayloadRoot in single application

我們有一個Spring應用程序,其中有一些Web服務將同時使用PayloadRoot和SoapAction。 現在,我們在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>

現在,我們要添加用於肥皂動作的代碼,但是如果添加以下代碼,則它將無法正常工作。 因此,我們如何為該bean提供“ id”屬性,並為特定的Web服務配置該bin。 還是有其他方法可以配置它? 我試圖進行自定義的終結點映射,但是對此沒有幫助。

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

配置它的一種更簡單的方法是使用Spring-WS提供的自定義名稱空間:

首先,對組件進行掃描以確保找到了@Endpoint注釋的bean:

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

以下將在內部注冊PayloadRootAnnotationMethodEndpointMappingSoapActionAnnotationMethodEndpointMapping

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM