覆盖WSDL中的整个地址

use*_*372 6 soap wsdl spring-boot

我使用以下指南创建了一个简单的spring-boot SOAP Web服务:https : //spring.io/guides/gs/production-web-service/

我正在将其部署到云服务中,但是在其前面将具有API管理层。

我希望WSDL使用API​​管理层的URL。(本质上是对地址进行硬编码。)

我尝试了两种方法:

  1. 使用DefaultWsdl11Definition.setLocationUri()

    @Bean(name = "countries")
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) {
    DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
    wsdl11Definition.setPortTypeName("CountriesPort");
    wsdl11Definition.setLocationUri("http://example.com/ws");
    wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
    wsdl11Definition.setSchema(countriesSchema);
    return wsdl11Definition;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用SimpleWsdl11Definition.setWsdl()指向手动编辑的WSDL

    @Bean(name = "countries")
    public SimpleWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) {
    SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
    wsdl11Definition.setWsdl(new ClassPathResource("countries.wsdl")); //this WSDL was edited to have the path I want
    return wsdl11Definition;
    } 
    
    Run Code Online (Sandbox Code Playgroud)

我正在与Maven合作。在这两种情况下,应用程序托管的WSDL都将其主机名替换为其运行的服务器,例如http:// localhost:8080 /,然后使用其余的URI。

    <wsdl:service name="CountriesPortService">
    <wsdl:port binding="tns:CountriesPortSoap11" name="CountriesPortSoap11">
    <soap:address location="http://localhost:8080/ws"/>
    </wsdl:port>
    </wsdl:service>
Run Code Online (Sandbox Code Playgroud)

如何设置/覆盖主机名部分

小智 4

我认为您正在Web 服务配置类的messageDispatcherServlet方法中使用setTransformWsdlLocations(true) 。此设置将根据其运行的环境转换 URL。删除此行,以便它将采用默认设置 fals 并且不会覆盖。