You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WS中自定义替换DefaultMethodEndpointAdapter的正确配置方法是什么?

Spring WS 替换默认DefaultMethodEndpointAdapter的最优配置方案

以下是三种稳定可靠的配置方案,可按需选择:

方案1:使用命名空间原生属性替换(最推荐)

如果你使用Spring WS提供的<sws:annotation-driven>命名空间配置,直接通过adapter-class属性指定自定义适配器即可,官方原生支持该替换逻辑,完全不会实例化默认的DefaultMethodEndpointAdapter:

<sws:annotation-driven adapter-class="somepackage.MyMethodEndpointAdapter"/>

该方案无需额外编码,兼容性最强,是优先选择的实现方式。

方案2:设置更高优先级适配

DefaultMethodEndpointAdapter实现了Ordered接口,默认优先级值为最低优先级。只需要给自定义适配器设置更高的优先级,就可以保证请求优先被自定义适配器处理,即使容器中存在默认实例也不会影响业务逻辑:

<bean id="defaultMethodEndpointAdapter" class="somepackage.MyMethodEndpointAdapter">
    <property name="order" value="0"/>
</bean>

优先级数值越小优先级越高,只要自定义适配器的优先级高于默认值,就会优先被调用。

方案3:彻底移除默认Bean定义

如果要求容器中完全不存在默认的DefaultMethodEndpointAdapter实例,可以通过BeanDefinitionRegistryPostProcessor在容器初始化阶段主动删除默认的Bean定义:

  1. 实现Bean定义移除处理器
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter;

public class DefaultEndpointAdapterRemover implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        String[] beanNames = registry.getBeanDefinitionNames();
        for (String beanName : beanNames) {
            BeanDefinition definition = registry.getBeanDefinition(beanName);
            if (DefaultMethodEndpointAdapter.class.getName().equals(definition.getBeanClassName())) {
                registry.removeBeanDefinition(beanName);
            }
        }
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    }
}
  1. 在XML配置中注册该处理器和自定义适配器
<bean class="somepackage.DefaultEndpointAdapterRemover"/>
<bean id="defaultMethodEndpointAdapter" class="somepackage.MyMethodEndpointAdapter"/>

该方案会彻底清除所有默认的DefaultMethodEndpointAdapter实例,仅保留自定义实现。

内容的提问来源于stack exchange,提问作者Artur Linhart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:39:02