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

时间:2017-05-22 09:57:18

标签: soap spring-boot spring-ws

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

我已经创建了我想要的内容,但是我在这个设置中遇到了两个URL问题,我无法找到应该更改的配置来修复此问题:

  • WSDL URL basic是localhost:8080 / ws / countries.wsdl但是像localhost:8080 / ws / whatever / countries.wsdl这样的东西是正确的
  • SoapUI请求的服务URL是localhost:8080 / ws但是像localhost:8080 / ws /其他任何东西都是正确的

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

2 个答案:

答案 0 :(得分:0)

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

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

    你想要的东西可能是以下方式。

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

    1. 现有/ws/*映射是所有/ws/whatever网址成功响应的原因。
    2. 更改为new ServletRegistrationBean(servlet, "/ws");
    3. 除了/ws网址
    4. 之外,您无法请求效果
    5. 现在问题是,您无法通过此映射获取WSDL。
    6. 获取WSDL的解决方案

      1. DefaultWsdl11Definition实际上是在每次请求时从XSD生成WSDL。
      2. countries.wsdl保存到resource文件夹作为静态WSDL文件。
      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中添加另一个静态网址映射。因为它最终看起来像new ServletRegistrationBean(servlet, "/ws", "/ws/countries.wsdl");

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

答案 1 :(得分:0)

只需更改

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

例如

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