@Override public void onComplete() { if (!cancelTimeout() && reqCtx.requestTimeoutHandler() == null) { // We have already returned a failed response due to a timeout. return; } if (wroteNothing(state)) { logger.warn("{} Published nothing (or only informational responses): {}", ctx.channel(), service()); responseEncoder.writeReset(req.id(), req.streamId(), Http2Error.INTERNAL_ERROR); return; } if (state != State.DONE) { final HttpHeaders additionalTrailers = reqCtx.additionalResponseTrailers(); if (!additionalTrailers.isEmpty()) { write(additionalTrailers, true); } else { write(HttpData.EMPTY_DATA, true); } } }
@Override public ServiceRequestContext newDerivedContext(Request request) { final DefaultServiceRequestContext ctx = new DefaultServiceRequestContext( cfg, ch, meterRegistry(), sessionProtocol(), pathMappingContext, pathMappingResult, (HttpRequest) request, sslSession(), proxiedAddresses(), clientAddress); final HttpHeaders additionalHeaders = additionalResponseHeaders(); if (!additionalHeaders.isEmpty()) { ctx.setAdditionalResponseHeaders(additionalHeaders); } final HttpHeaders additionalTrailers = additionalResponseTrailers(); if (!additionalTrailers.isEmpty()) { ctx.setAdditionalResponseTrailers(additionalTrailers); } for (final Iterator<Attribute<?>> i = attrs(); i.hasNext();/* noop */) { ctx.addAttr(i.next()); } return ctx; }
" (service: " + service() + ')'); final HttpHeaders additionalTrailers = reqCtx.additionalResponseTrailers(); o = fillAdditionalHeaders(trailingHeaders, additionalTrailers); final HttpHeaders additionalTrailers = reqCtx.additionalResponseTrailers(); if (!additionalTrailers.isEmpty()) { write(o, false);