org.springframework.http.client.XBodyCachingClientHttpResponse Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.http.client;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpRetryException;
import org.springframework.util.FileCopyUtils;
/**
* {@link XClientHttpResponse} for body caching
*/
public class XBodyCachingClientHttpResponse extends XClientHttpResponse {
/**
* Constructor
*
* @param delegate delegate
*/
public XBodyCachingClientHttpResponse(ClientHttpResponse delegate) {
super(delegate);
}
/**
* Body
*/
private byte[] body;
/**
* {@inheritDoc}
*
* @see org.springframework.web.client.DefaultResponseErrorHandler
*/
@Override
public InputStream getBody() throws IOException {
if (this.body == null) {
try (InputStream stream = super.getBody()) {
this.body = FileCopyUtils.copyToByteArray(stream);
}
catch (HttpRetryException e) {
// https://jira.spring.io/browse/SPR-9999
this.body = new StringBuilder()
/* @formatter:off */
.append("(Failed to get body: ")
.append(e.getMessage())
.append(")")
.toString()
.getBytes();
/* @formatter:on */
}
}
return new ByteArrayInputStream(this.body);
}
}