Type newType = adaptGenericType(unwrappedType);
private void exceptionWhileResuming(Throwable e) { try { // OK, not funny: if this is not a handled exception, it will just be logged and rethrown, so ignore it and move on internalResume(e, t -> {}); } catch(Throwable t2) { } // be done with this stream complete(e); }
protected void internalResume(Object entity, Consumer<Throwable> onComplete) { ResteasyContext.pushContextDataMap(contextDataMap); HttpRequest httpRequest = (HttpRequest) contextDataMap.get(HttpRequest.class); HttpResponse httpResponse = (HttpResponse) contextDataMap.get(HttpResponse.class); BuiltResponse builtResponse = createResponse(entity, httpRequest); try { sendBuiltResponse(builtResponse, httpRequest, httpResponse, e -> { if(e != null) { exceptionWhileResuming(e); } onComplete.accept(e); }); } catch (Throwable e) { exceptionWhileResuming(e); onComplete.accept(e); } }
if (asyncResponseProvider != null) asyncStreamResponseConsumer = AsyncResponseConsumer.makeAsyncResponseConsumer(this, asyncResponseProvider); asyncStreamResponseConsumer = AsyncResponseConsumer.makeAsyncResponseConsumer(this, asyncStreamProvider); asyncStreamResponseConsumer.internalResume(ex, t -> consumer.complete(ex)); asyncStreamResponseConsumer.subscribe(rtn); return null;
@Override protected void doComplete() { // we can be done by exception before we've even subscribed if(subscription != null) subscription.cancel(); super.doComplete(); }
protected void sendBuiltResponse(BuiltResponse builtResponse, HttpRequest httpRequest, HttpResponse httpResponse, Consumer<Throwable> onComplete) throws IOException { // send headers only if we're not streaming, or if we're sending the first stream element boolean sendHeaders = sendHeaders(); ServerResponseWriter.writeNomapResponse(builtResponse, httpRequest, httpResponse, dispatcher.getProviderFactory(), onComplete, sendHeaders); }
if (asyncResponseProvider != null) asyncResponseConsumer = AsyncResponseConsumer.makeAsyncResponseConsumer(this, asyncResponseProvider); asyncResponseConsumer = AsyncResponseConsumer.makeAsyncResponseConsumer(this, asyncStreamProvider);
asyncResponseConsumer.subscribe(rtn); return null;
public final synchronized void complete(Throwable t) { if (!isComplete) { isComplete = true; doComplete(); asyncResponse.completionCallbacks(t); ResteasyContext.removeContextDataLevel(); } }
protected void sendBuiltResponse(BuiltResponse builtResponse, HttpRequest httpRequest, HttpResponse httpResponse, Consumer<Throwable> onComplete) throws IOException { // send headers only if we're not streaming, or if we're sending the first stream element boolean sendHeaders = sendHeaders(); ServerResponseWriter.writeNomapResponse(builtResponse, httpRequest, httpResponse, dispatcher.getProviderFactory(), onComplete, sendHeaders); }
if (asyncResponseProvider != null) asyncResponseConsumer = AsyncResponseConsumer.makeAsyncResponseConsumer(this, asyncResponseProvider); asyncResponseConsumer = AsyncResponseConsumer.makeAsyncResponseConsumer(this, asyncStreamProvider);
asyncResponseConsumer.subscribe(rtn); return null;
protected void internalResume(Object entity, Consumer<Throwable> onComplete) { ResteasyContext.pushContextDataMap(contextDataMap); HttpRequest httpRequest = (HttpRequest) contextDataMap.get(HttpRequest.class); HttpResponse httpResponse = (HttpResponse) contextDataMap.get(HttpResponse.class); BuiltResponse builtResponse = createResponse(entity, httpRequest); try { sendBuiltResponse(builtResponse, httpRequest, httpResponse, e -> { if(e != null) { exceptionWhileResuming(e); } onComplete.accept(e); }); } catch (Throwable e) { exceptionWhileResuming(e); onComplete.accept(e); } }
asyncStreamResponseConsumer.internalResume(ex, t -> consumer.complete(ex));
@Override protected void doComplete() { // we can be done by exception before we've even subscribed if(subscription != null) subscription.cancel(); super.doComplete(); }
protected void sendBuiltResponse(BuiltResponse builtResponse, HttpRequest httpRequest, HttpResponse httpResponse, Consumer<Throwable> onComplete) throws IOException { // send headers only if we're not streaming, or if we're sending the first stream element boolean sendHeaders = sendHeaders(); ServerResponseWriter.writeNomapResponse(builtResponse, httpRequest, httpResponse, dispatcher.getProviderFactory(), onComplete, sendHeaders); }
Type newType = adaptGenericType(unwrappedType);
protected void internalResume(Object entity, Consumer<Throwable> onComplete) { ResteasyProviderFactory.pushContextDataMap(contextDataMap); HttpRequest httpRequest = (HttpRequest) contextDataMap.get(HttpRequest.class); HttpResponse httpResponse = (HttpResponse) contextDataMap.get(HttpResponse.class); BuiltResponse builtResponse = createResponse(entity, httpRequest); try { sendBuiltResponse(builtResponse, httpRequest, httpResponse, e -> { if(e != null) { exceptionWhileResuming(e); } onComplete.accept(e); }); } catch (IOException e) { onComplete.accept(e); exceptionWhileResuming(e); } }
private void exceptionWhileResuming(Throwable e) { try { // OK, not funny: if this is not a handled exception, it will just be logged and rethrown, so ignore it and move on internalResume(e, t -> {}); } catch(Throwable t2) { } // be done with this stream complete(e); }
@Override protected void doComplete() { // we can be done by exception before we've even subscribed if(subscription != null) subscription.cancel(); super.doComplete(); }