@Override protected void channelRead0(ChannelHandlerContext ctx, StreamResponse response) throws Exception { final Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); headers.putAll(response.getHeaders()); final Map<String, String> wireAttrs = WireAttributeHelper.removeWireAttributes(headers); final StreamResponse newResponse = new StreamResponseBuilder(response) .unsafeSetHeaders(headers) .build(response.getEntityStream()); // In general there should always be a callback to handle a received message, // but it could have been removed due to a previous exception or closure on the // channel TransportCallback<StreamResponse> callback = ctx.channel().attr(CALLBACK_ATTR_KEY).getAndSet(null); if (callback != null) { LOG.debug("{}: handling a response", ctx.channel().remoteAddress()); callback.onResponse(TransportResponseImpl.success(newResponse, wireAttrs)); } else { LOG.debug("{}: dropped a response", ctx.channel().remoteAddress()); } }
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof ResponseWithCallback) { @SuppressWarnings("unchecked") ResponseWithCallback<StreamResponse, TransportCallback<StreamResponse>> responseWithCallback = (ResponseWithCallback<StreamResponse, TransportCallback<StreamResponse>>) msg; StreamResponse response = responseWithCallback.response(); TransportCallback<StreamResponse> callback = responseWithCallback.callback(); Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); headers.putAll(response.getHeaders()); Map<String, String> wireAttrs = WireAttributeHelper.removeWireAttributes(headers); StreamResponse newResponse = new StreamResponseBuilder(response) .unsafeSetHeaders(headers) .build(response.getEntityStream()); LOG.debug("{}: handling a response", ctx.channel().remoteAddress()); callback.onResponse(TransportResponseImpl.success(newResponse, wireAttrs)); } ctx.fireChannelRead(msg); }
@Override public void onSuccess(ByteString result) { try { responseCallback.onSuccess(createResponse(streamResponse.getHeaders(), streamResponse.getStatus(), result, streamResponse.getCookies())); } catch (Exception exception) { onError(exception); } } });
Map<String, String> headers = streamResponse.getHeaders(); for (Map.Entry<String, String> e : headers.entrySet())
try streamDataCodec = getContentType(streamResponse.getHeaders().get(RestConstants.HEADER_CONTENT_TYPE)).orElse(JSON).getStreamCodec(); responseCallback.onSuccess(createResponse(streamResponse.getHeaders(), streamResponse.getStatus(), dataMap, streamResponse.getCookies()));