将代理数据设置为Spring SOAP Web服务模板

时间:2018-08-06 10:18:05

标签: java spring web-services spring-boot soap

我正在开发一个必须使用SOAP Web服务并将其转换为基于Rest的Web服务的应用程序。我遵循了the tutorial from Spring team并且能够生成pojos,但是当我尝试使用webServiceTemplate进行呼叫时,出现一个错误,即主机未被识别,这主要是因为我在我们公司的代理后面。 / p>

我使用的技术堆栈是带有Web模块和spring-ws-core的Spring Boot,我想知道如何在webServiceTemplate中设置代理数据。

谢谢

2 个答案:

答案 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;
    }