我正在开发一个必须使用SOAP Web服务并将其转换为基于Rest的Web服务的应用程序。我遵循了the tutorial from Spring team并且能够生成pojos,但是当我尝试使用webServiceTemplate进行呼叫时,出现一个错误,即主机未被识别,这主要是因为我在我们公司的代理后面。 / p>
我使用的技术堆栈是带有Web模块和spring-ws-core的Spring Boot,我想知道如何在webServiceTemplate中设置代理数据。
谢谢
答案 0 :(得分:1)
尝试根据this answer设置模板。
之后,您应该可以在使用扩展WebServiceGatewaySupport的类中进行设置
setWebServiceTemplate(WebServiceTemplate webServiceTemplate)
答案 1 :(得分:0)
经过大量研究,我想出了一个程序化解决方案。定义将扩展WebServiceGatewaySupport
类的SOAP客户端后,我创建了一个配置类(带有@configuration
注释,该类将声明我的SOAP客户端的bean。在这种方法中,我使用以下代码进行设置)我的代理信息,因此我可以使用我的Web服务:
@Bean
public CommerceSoapClient commerceSoapClient(Jaxb2Marshaller marshaller) {
CommerceSoapClient commerceService = new CommerceSoapClient();
//Setup proxy
HttpClientBuilder builder = HttpClientBuilder.create();
builder.addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor());
HttpHost proxy = new HttpHost("127.0.0.1", 8080);
builder.setProxy(proxy);
CloseableHttpClient httpClient = builder.build();
HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender(httpClient);
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setMessageSender(messageSender);
webServiceTemplate.setDefaultUri("http://your webservice address path");
webServiceTemplate.setUnmarshaller(marshaller);
webServiceTemplate.setMarshaller(marshaller);
commerceService.setDefaultUri("https://your webservice address path");
commerceService.setWebServiceTemplate(webServiceTemplate);
return commerceService;
}