in linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala [511:589]
protected def responseToResult(response: HttpResponse, requestAction: Action): Result =
Utils.tryFinally {
val entity = response.getEntity
val result = requestAction match {
case download: DownloadAction =>
val statusCode = response.getStatusLine.getStatusCode
if (statusCode != 200) {
var responseBody: String = null
if (entity != null) {
responseBody = EntityUtils.toString(entity, "UTF-8")
}
response match {
case r: CloseableHttpResponse =>
IOUtils.closeQuietly(r)
case _ =>
}
throw new HttpClientResultException(s"request failed! ResponseBody is $responseBody.")
}
val inputStream =
if (
entity.getContentEncoding != null && StringUtils.isNotBlank(
entity.getContentEncoding.getValue
)
) {
entity.getContentEncoding.getValue.toLowerCase(Locale.getDefault) match {
case "gzip" => new GzipDecompressingEntity(entity).getContent
case "deflate" => new DeflateDecompressingEntity(entity).getContent
case str =>
throw new HttpClientResultException(
s"request failed! Reason: not support decompress type $str."
)
}
} else entity.getContent
download.write(inputStream, response)
Result()
case heartbeat: HeartbeatAction =>
discovery
.map { case d: AbstractDiscovery =>
d.getHeartbeatResult(response, heartbeat)
}
.getOrElse(
throw new HttpMessageParseException(
"Discovery is not enable, HeartbeatAction is not needed!"
)
)
case auth: AuthenticationAction =>
clientConfig.getAuthenticationStrategy match {
case a: AbstractAuthenticationStrategy => a.getAuthenticationResult(response, auth)
case _ =>
throw new HttpMessageParseException(
"AuthenticationStrategy is not enable, login is not needed!"
)
}
case httpAction: HttpAction =>
var responseBody: String = null
if (entity != null) {
responseBody = EntityUtils.toString(entity, "UTF-8")
}
httpResponseToResult(response, httpAction, responseBody)
.getOrElse(throw new HttpMessageParseException("cannot parse message: " + responseBody))
}
result match {
case userAction: UserAction =>
requestAction match {
case _userAction: UserAction => userAction.setUser(_userAction.getUser)
case _ =>
}
case _ =>
}
result
} {
if (!requestAction.isInstanceOf[DownloadAction]) {
response match {
case r: CloseableHttpResponse =>
IOUtils.closeQuietly(r)
case _ =>
}
}
}