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

Spring Boot WS中WSDL的.与?表示法适配及URL重写配置问题

解决Spring Boot契约优先Web服务WSDL地址重写问题

我来帮你搞定这个WSDL地址的转换需求,既然已经集成了Tuckey UrlRewriteFilter,只需要配置正确的规则就能实现http://localhost:8080/ws/countries?wsdl到http://localhost:8080/ws/countries.wsdl的内部转发,具体步骤如下:

1. 确保UrlRewriteFilter依赖正确(若未添加)

如果你的项目还没引入Tuckey的依赖,先在pom.xml中添加适配Spring Boot 2.x的版本:

<dependency>
    <groupId>org.tuckey</groupId>
    <artifactId>urlrewritefilter</artifactId>
    <version>4.0.4</version>
</dependency>

2. 注册UrlRewriteFilter到Spring Boot容器

创建一个配置类,手动注册过滤器并指定配置文件路径:

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;

@Configuration
public class UrlRewriteConfig {

    @Bean
    public FilterRegistrationBean<UrlRewriteFilter> urlRewriteFilter() {
        FilterRegistrationBean<UrlRewriteFilter> registrationBean = new FilterRegistrationBean<>();
        UrlRewriteFilter urlRewriteFilter = new UrlRewriteFilter();
        registrationBean.setFilter(urlRewriteFilter);
        // 指定urlrewrite配置文件的位置
        registrationBean.addInitParameter("confPath", "/urlrewrite.xml");
        // 只过滤ws路径下的请求,避免影响其他接口
        registrationBean.addUrlPatterns("/ws/*");
        return registrationBean;
    }
}

3. 编写URL重写规则

在src/main/resources下创建urlrewrite.xml文件,添加针对WSDL地址的重写规则:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
        PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">

<urlrewrite>
    <!-- 针对单个服务的规则:匹配/ws/countries且带wsdl参数的请求,转发到对应的.wsdl地址 -->
    <rule>
        <from>^/ws/countries$</from>
        <condition type="parameter" name="wsdl" operator="equal">true</condition>
        <!-- 使用forward类型实现内部转发,浏览器地址栏不会变化 -->
        <to type="forward">/ws/countries.wsdl</to>
    </rule>

    <!-- 可选:如果有多个Web服务,用通配符规则批量适配 -->
    <!--
    <rule>
        <from>^/ws/([a-zA-Z0-9_-]+)$</from>
        <condition type="parameter" name="wsdl" operator="equal">true</condition>
        <to type="forward">/ws/$1.wsdl</to>
    </rule>
    -->
</urlrewrite>

4. 验证规则生效

启动Spring Boot服务后,访问http://localhost:8080/ws/countries?wsdl,你会看到和http://localhost:8080/ws/countries.wsdl完全一致的WSDL内容,且浏览器地址栏保持为带?wsdl的格式,满足消费方的要求。

注意事项

  • 一定要使用type="forward"的转发类型,这样是内部服务器跳转,不会改变外部访问的URL;如果用redirect会导致地址栏变成.wsdl的格式,不符合需求。
  • 通配符规则适合多个Web服务的场景,不用为每个服务单独编写规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:50:19