Spring是否支持生成包含多个SOAP服务的单个WSDL文件?
结论
Spring WS默认不支持自动将多个绑定独立XSD的SOAP端点合并生成单个WSDL。你现在遇到的只有最先声明的端点出WSDL的问题,是框架默认加载逻辑导致的:每个Wsdl11Definition类型的Bean默认对应一个独立WSDL文件,如果多个Bean映射到同个WSDL访问路径,Spring只会加载最先初始化的那个,其余定义会被覆盖。
可以通过以下步骤实现单WSDL覆盖全部4个端点:
- 合并Schema定义:新建一个主XSD文件作为WSDL的唯一Schema源,通过
<xs:import>标签把4个独立的业务XSD全部导入,必须给每个独立XSD配置唯一的targetNamespace,避免类型、元素重名冲突。 - 精简WSDL配置:删掉配置类里原本为每个端点单独声明的
DefaultWsdl11Definition/SimpleWsdl11DefinitionBean,只保留一个全局的DefaultWsdl11Definition实例,将这个实例绑定到你新建的主XSD上。 - 校验端点映射:检查4个端点的服务方法,确保每个方法上
@PayloadRoot注解的namespace、localPart配置,和对应XSD里定义的请求元素完全匹配,Spring WS会自动扫描所有符合映射规则的端点方法,把这些操作全部关联到同一个WSDL定义中。
补充说明
- 不要尝试通过自定义
Wsdl11Definition实现类手动拼接WSDL结构来做合并,这种方式需要手动处理WSDL的PortType、Binding、Service等所有节点的拼装逻辑,后续接口迭代的维护成本极高,没有实用价值。 - 配置完成后直接访问WSDL地址校验即可,只要WSDL里的
wsdl:portType、wsdl:binding节点下包含全部4个服务对应的操作定义,就说明配置生效。
内容的提问来源于stack exchange,提问作者Xaray
相关产品推荐
相关产品推荐

