RestTemplate隐式使用代理吗?我怎么能说出来?

时间:2016-11-23 16:40:34

标签: java spring resttemplate wiremock

我正在使用Wiremock测试Java REST客户端,特别是它如何处理空响应。

受测试代码:

public Content makeRequest(...) { 
    try {
        ResponseEntity response = restTemplate.exchange(...);
        if(response.getStatusCode() != 200) {
           throw new BadStatusCodeException(response.getStatusCode());
        }
        return extractContent(response);
    } catch (IOException e) {
        throw new ProtocolException(e);
    }    
}

测试:

Wiremock.stubFor(put(urlPathEqualTo("/foo"))
            .willReturn(aResponse().withFault(EMPTY_RESPONSE)));

thrown.expect(ProtocolException.class);

client.makeRequest();

此测试在我的本地计算机上传递,但在我们的构建计算机上它失败,抛出状态码为500的BadStatusException

我最好的猜测是,在我的本地机器上,RestTemplate正在与Wiremock服务器建立直接连接,但是在构建机器上,连接是通过代理进行的 - 可能是因为环境变量等 - 并且代理在遇到WireMock模拟的错误时返回500错误。

强迫我的RestTemplate使用Apache HttpClient,如下所示:

ClientHttpRequestFactory httpRequestFactory = 
    new HttpComponentsAsyncClientHttpRequestFactory();
RestTemplate restTemplate = new RestTemplate(httpRequestFactory);

...似乎解决了这个问题,但我真的不想将额外的依赖项带入这个库(这个库的使用者将注入他们自己的RestTemplate,但他们喜欢配置它们。)

我的理论是否合情合理?我如何验证这是发生了什么?如何强制RestTemplate直接连接?还有什么其他解释?

0 个答案:

没有答案