Spring WS 删除灵活 URL、限制 WSDL URL 和服务 URL

Spring WS remove flexible URL, Restricting WSDL URL and service URL

我正在尝试创建一个 Spring Boot Soap WebService 应用程序,并且正在按照入门 (https://spring.io/guides/gs/producing-web-service/) 示例学习如何执行此操作。

我已经创建了我想要的,但是我有两个 URL 这个设置的问题,我找不到我应该更改什么配置来解决这个问题:

我知道这是 Spring WS 的一个功能,但我想要一个固定的 URL(在这两种情况下都没有 'whatever')并且找不到为此更改的内容

没有直接的方法来限制你想要的方式。

  1. SOAP 服务不是 URL 基于的。
  2. SOAP 消息正文描述端点。

The thing you wanted is possible following way.

更改 ServletRegistrationBean 中的 URL 映射以限制 URL 访问

  1. 现有 /ws/* 映射是所有 /ws/whatever url 成功响应的原因。
  2. 更改为new ServletRegistrationBean(servlet, "/ws");
  3. 效果是除了/wsURL
  4. 你不能要求
  5. 现在的问题是,您无法通过此映射获取 WSDL。

获取 WSDL 的解决方案

  1. DefaultWsdl11Definition 实际上在每次请求时从 XSD 生成 WSDL。
  2. countries.wsdl 作为静态 WSDL 文件保存到 resource 文件夹。
  3. 删除 DefaultWsdl11Definition 个 bean。
  4. 一样创建一个新的 SimpleWsdl11Definition bean

    @Bean(name = "countries") public SimpleWsdl11Definition orders() { SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition(); wsdl11Definition.setWsdl(new ClassPathResource("countries.wsdl")); return wsdl11Definition; }

  5. 现在在 ServletRegistrationBean 中添加另一个静态 URL 映射。因为它最终看起来像 new ServletRegistrationBean(servlet, "/ws", "/ws/countries.wsdl");

  6. 这种做法有利于开发阶段,因为您可以轻松发布更改后的定义。但建议生产环境使用static-wsdl。详情** here

改变一下

return new ServletRegistrationBean(servlet, "/ws/*");

例如

return new ServletRegistrationBean(servlet, new String[]{
        "/ws/v1/countries.wsdl",
        "/ws/v2/countries.wsdl"
});