覆盖WSDL

时间:2018-02-14 17:43:24

标签: spring-boot soap wsdl

我使用本指南创建了一个简单的spring-boot SOAP Web服务: https://spring.io/guides/gs/producing-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;
    }
    
  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;
    } 
    
  3. 我正和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>
    

    如何设置/覆盖

    的主机名部分

1 个答案:

答案 0 :(得分:0)

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