我使用本指南创建了一个简单的spring-boot SOAP Web服务: https://spring.io/guides/gs/producing-web-service/
我正在将它部署到云服务,但它前面会有一个API管理层。
我希望WSDL能够使用API管理层的URL。 (基本上硬编码地址。)
我尝试了两种方法:
使用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;
}
使用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;
}
我正和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>
如何设置/覆盖
的主机名部分答案 0 :(得分:0)
我认为您在Web服务配置类的 messageDispatcherServlet 方法中使用 setTransformWsdlLocations(true)。此设置将根据运行的环境转换URL。 删除此行,使其默认设置为fals&amp;它不会覆盖。