首页 > 解决方案 > 将代理数据设置为 Spring SOAP Web 服务模板

问题描述

我正在开发一个应用程序,我必须使用 SOAP Web 服务并将其转换为基于 Rest 的 Web 服务。我遵循Spring 团队的教程并能够生成 pojos,但是当我尝试使用 webServiceTemplate 进行调用时,出现主机无法识别的错误,这基本上是因为我在我们公司的代理后面。

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

谢谢

标签: javaspringweb-servicesspring-bootsoap

解决方案


经过大量研究,我想出了一个程序化的解决方案。一旦您定义了将扩展 WebServiceGatewaySupport类的 SOAP 客户端,我创建了一个配置类(带有注释的@configuration将声明我的 SOAP 客户端的 bean。在此方法中,我使用以下代码来设置我的代理信息,因此我能够使用我的网络服务:

@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;
    }

推荐阅读