0

我们有一个 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>
4

1 回答 1

1

配置它的更简单方法是使用 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>**
于 2012-10-01T12:36:51.920 回答