gpt4 book ai didi

java - 需要在单个应用程序中同时使用 @soapaction 和 @PayloadRoot

转载 作者:行者123 更新时间:2023-12-01 15:08:16 25 4
gpt4 key购买 nike

我们有一个 Spring 应用程序,其中有将使用 PayloadRoot 和 SoapAction 的 Web 服务。现在我们在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 服务配置这个 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>**

关于java - 需要在单个应用程序中同时使用 @soapaction 和 @PayloadRoot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12671909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com