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 这个设置的问题,我找不到我应该更改什么配置来解决这个问题:
- WSDL URL 基本的是 localhost:8080/ws/countries.wsdl 但像 localhost:8080/ws/whatever/countries.wsdl 这样的东西是正确的
SoapUI 请求的 - service URL 是 localhost:8080/ws 但像 localhost:8080/ws/whatever 这样的东西是正确的
我知道这是 Spring WS 的一个功能,但我想要一个固定的 URL(在这两种情况下都没有 'whatever')并且找不到为此更改的内容
没有直接的方法来限制你想要的方式。
- SOAP 服务不是 URL 基于的。
- SOAP 消息正文描述端点。
The thing you wanted is possible following way.
更改 ServletRegistrationBean
中的 URL 映射以限制 URL 访问
- 现有
/ws/*
映射是所有 /ws/whatever
url 成功响应的原因。
- 更改为
new ServletRegistrationBean(servlet, "/ws");
- 效果是除了
/ws
URL 你不能要求
- 现在的问题是,您无法通过此映射获取 WSDL。
获取 WSDL 的解决方案
DefaultWsdl11Definition
实际上在每次请求时从 XSD 生成 WSDL。
- 将
countries.wsdl
作为静态 WSDL 文件保存到 resource
文件夹。
- 删除
DefaultWsdl11Definition
个 bean。
像
一样创建一个新的 SimpleWsdl11Definition
bean
@Bean(name = "countries")
public SimpleWsdl11Definition orders() {
SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
wsdl11Definition.setWsdl(new ClassPathResource("countries.wsdl"));
return wsdl11Definition;
}
现在在 ServletRegistrationBean
中添加另一个静态 URL 映射。因为它最终看起来像 new ServletRegistrationBean(servlet, "/ws", "/ws/countries.wsdl");
- 这种做法有利于开发阶段,因为您可以轻松发布更改后的定义。但建议生产环境使用
static-wsdl
。详情** here
改变一下
return new ServletRegistrationBean(servlet, "/ws/*");
例如
return new ServletRegistrationBean(servlet, new String[]{
"/ws/v1/countries.wsdl",
"/ws/v2/countries.wsdl"
});
我正在尝试创建一个 Spring Boot Soap WebService 应用程序,并且正在按照入门 (https://spring.io/guides/gs/producing-web-service/) 示例学习如何执行此操作。
我已经创建了我想要的,但是我有两个 URL 这个设置的问题,我找不到我应该更改什么配置来解决这个问题:
- WSDL URL 基本的是 localhost:8080/ws/countries.wsdl 但像 localhost:8080/ws/whatever/countries.wsdl 这样的东西是正确的 SoapUI 请求的
- service URL 是 localhost:8080/ws 但像 localhost:8080/ws/whatever 这样的东西是正确的
我知道这是 Spring WS 的一个功能,但我想要一个固定的 URL(在这两种情况下都没有 'whatever')并且找不到为此更改的内容
没有直接的方法来限制你想要的方式。
- SOAP 服务不是 URL 基于的。
- SOAP 消息正文描述端点。
The thing you wanted is possible following way.
更改 ServletRegistrationBean
中的 URL 映射以限制 URL 访问
- 现有
/ws/*
映射是所有/ws/whatever
url 成功响应的原因。 - 更改为
new ServletRegistrationBean(servlet, "/ws");
- 效果是除了
/ws
URL 你不能要求
- 现在的问题是,您无法通过此映射获取 WSDL。
获取 WSDL 的解决方案
DefaultWsdl11Definition
实际上在每次请求时从 XSD 生成 WSDL。- 将
countries.wsdl
作为静态 WSDL 文件保存到resource
文件夹。 - 删除
DefaultWsdl11Definition
个 bean。 像
一样创建一个新的SimpleWsdl11Definition
bean@Bean(name = "countries") public SimpleWsdl11Definition orders() { SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition(); wsdl11Definition.setWsdl(new ClassPathResource("countries.wsdl")); return wsdl11Definition; }
现在在
ServletRegistrationBean
中添加另一个静态 URL 映射。因为它最终看起来像new ServletRegistrationBean(servlet, "/ws", "/ws/countries.wsdl");
- 这种做法有利于开发阶段,因为您可以轻松发布更改后的定义。但建议生产环境使用
static-wsdl
。详情** here
改变一下
return new ServletRegistrationBean(servlet, "/ws/*");
例如
return new ServletRegistrationBean(servlet, new String[]{
"/ws/v1/countries.wsdl",
"/ws/v2/countries.wsdl"
});