![](/img/trans.png)
[英]@PayloadRoot vs @Action vs @SoapAction in Spring-WS
[英]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="..." />
以下将在内部注册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>**
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.