reactor.core.Exceptions.throwIfFatal()方法的使用及代码示例

x33g5p2x  于2022-01-19 转载在 其他  
字(8.4k)|赞(0)|评价(0)|浏览(137)

本文整理了Java中reactor.core.Exceptions.throwIfFatal()方法的一些代码示例,展示了Exceptions.throwIfFatal()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Exceptions.throwIfFatal()方法的具体详情如下:
包路径:reactor.core.Exceptions
类名称:Exceptions
方法名:throwIfFatal

Exceptions.throwIfFatal介绍

[英]Throws a particular Throwable only if it belongs to a set of "fatal" error varieties. These varieties are as follows:

  • BubblingException (as detectable by #isBubbling(Throwable))
  • ErrorCallbackNotImplemented (as detectable by #isErrorCallbackNotImplemented(Throwable))
  • VirtualMachineError
  • ThreadDeath
  • LinkageError
    [中]仅当某个特定的可丢弃对象属于一组“致命”错误变体时,才会抛出该对象。这些品种如下:
    *BubblingException(可通过#isBubbling(可丢弃)检测)
    *ErrorCallbackNotImplemented(可由#isErrorCallbackNotImplemented(可丢弃))检测)
    *虚拟机器错误
    *线状死亡
    *链接错误

代码示例

代码示例来源:origin: reactor/reactor-core

@Override
  public Throwable process(Throwable error, @Nullable Object value, Context context) {
    Exceptions.throwIfFatal(error);
    Throwable iee = new IllegalStateException("STOP strategy cannot process errors");
    iee.addSuppressed(error);
    return iee;
  }
};

代码示例来源:origin: reactor/reactor-core

@Override
public void run() {
  if (!disposed) {
    try {
      run.run();
    }
    catch (Throwable ex) {
      Exceptions.throwIfFatal(ex);
      throw Exceptions.propagate(ex);
    }
  }
}

代码示例来源:origin: reactor/reactor-core

/**
 * Prepare an unchecked {@link RuntimeException} that will bubble upstream if thrown
 * by an operator. <p>This method invokes {@link #throwIfFatal(Throwable)}.
 *
 * @param t the root cause
 *
 * @return an unchecked exception that should choose bubbling up over error callback
 * path
 */
public static RuntimeException bubble(Throwable t) {
  throwIfFatal(t);
  return new BubblingException(t);
}

代码示例来源:origin: reactor/reactor-core

/**
 * Prepare an unchecked {@link RuntimeException} that should be propagated
 * downstream through {@link org.reactivestreams.Subscriber#onError(Throwable)}.
 * <p>This method invokes {@link #throwIfFatal(Throwable)}.
 *
 * @param t the root cause
 *
 * @return an unchecked exception to propagate through onError signals.
 */
public static RuntimeException propagate(Throwable t) {
  throwIfFatal(t);
  if (t instanceof RuntimeException) {
    return (RuntimeException) t;
  }
  return new ReactiveException(t);
}

代码示例来源:origin: reactor/reactor-core

void runFinally(SignalType signalType) {
  if (ONCE.compareAndSet(this, 0, 1)) {
    try {
      onFinally.accept(signalType);
    } catch (Throwable ex) {
      Exceptions.throwIfFatal(ex);
      Operators.onErrorDropped(ex, actual.currentContext());
    }
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
  @Nullable
  public Throwable process(Throwable error, @Nullable Object value, Context context) {
    if (errorPredicate == null) {
      Exceptions.throwIfFatal(error);
    }
    else if (!errorPredicate.test(error)) {
      Exceptions.throwIfFatal(error);
      return error;
    }
    try {
      errorConsumer.accept(error, value);
      return null;
    }
    catch (Throwable e) {
      e.addSuppressed(error);
      return e;
    }
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
public final void onNext(T x) {
  try {
    if (consumer != null) {
      consumer.accept(x);
    }
  }
  catch (Throwable t) {
    Exceptions.throwIfFatal(t);
    this.subscription.cancel();
    onError(t);
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
  @Nullable
  public Throwable process(Throwable error, @Nullable Object value, Context context) {
    if (errorPredicate == null) {
      Exceptions.throwIfFatal(error);
    }
    else if (!errorPredicate.test(error)) {
      Exceptions.throwIfFatal(error);
      return error;
    }
    try {
      if (value != null) {
        Operators.onNextDropped(value, context);
      }
      Operators.onErrorDropped(error, context);
      return null;
    }
    catch (Throwable e) {
      e.addSuppressed(error);
      return e;
    }
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
public final void onSubscribe(Subscription s) {
  if (Operators.validate(subscription, s)) {
    this.subscription = s;
    if (subscriptionConsumer != null) {
      try {
        subscriptionConsumer.accept(s);
      }
      catch (Throwable t) {
        Exceptions.throwIfFatal(t);
        s.cancel();
        onError(t);
      }
    }
    else {
      s.request(Long.MAX_VALUE);
    }
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
public final void onSubscribe(Subscription s) {
  if (Operators.validate(subscription, s)) {
    this.subscription = s;
    if (subscriptionConsumer != null) {
      try {
        subscriptionConsumer.accept(s);
      }
      catch (Throwable t) {
        Exceptions.throwIfFatal(t);
        s.cancel();
        onError(t);
      }
    }
    else {
      s.request(Long.MAX_VALUE);
    }
  }
}

代码示例来源:origin: reactor/reactor-core

/**
 * Common method for FluxPeek and FluxPeekFuseable to deal with a doAfterTerminate
 * callback that fails during onComplete. It drops the error to the global hook.
 * <ul>
 *     <li>The callback failure is thrown immediately if fatal.</li>
 *     <li>{@link Operators#onOperatorError(Throwable, Context)} is called</li>
 *     <li>{@link Operators#onErrorDropped(Throwable, Context)} is called</li>
 * </ul>
 * <p>
 *
 * @param parent the {@link SignalPeek} from which to get the callbacks
 * @param callbackFailure the afterTerminate callback failure
 * @param context subscriber context
 */
//see https://github.com/reactor/reactor-core/issues/270
static <T> void afterCompleteWithFailure(SignalPeek<T> parent,
    Throwable callbackFailure, Context context) {
  Exceptions.throwIfFatal(callbackFailure);
  Throwable _e = Operators.onOperatorError(callbackFailure, context);
  Operators.onErrorDropped(_e, context);
}

代码示例来源:origin: reactor/reactor-core

void dispose(@Nullable List<Disposable> set) {
  if (set == null) {
    return;
  }
  List<Throwable> errors = null;
  for (Disposable o : set) {
    try {
      o.dispose();
    } catch (Throwable ex) {
      Exceptions.throwIfFatal(ex);
      if (errors == null) {
        errors = new ArrayList<>();
      }
      errors.add(ex);
    }
  }
  if (errors != null) {
    if (errors.size() == 1) {
      throw Exceptions.propagate(errors.get(0));
    }
    throw Exceptions.multiple(errors);
  }
}

代码示例来源:origin: reactor/reactor-core

/**
 * Common method for FluxPeek and FluxPeekFuseable to deal with a doAfterTerminate
 * callback that fails during onError. It drops the error to the global hook.
 * <ul>
 *     <li>The callback failure is thrown immediately if fatal.</li>
 *     <li>{@link Operators#onOperatorError(Subscription, Throwable, Object, Context)} is
 *     called, adding the original error as suppressed</li>
 *     <li>{@link Operators#onErrorDropped(Throwable, Context)} is called</li>
 * </ul>
 * <p>
 *
 * @param parent the {@link SignalPeek} from which to get the callbacks
 * @param callbackFailure the afterTerminate callback failure
 * @param originalError the onError throwable
 * @param context subscriber context
 */
//see https://github.com/reactor/reactor-core/issues/270
static <T> void afterErrorWithFailure(SignalPeek<T> parent,
    Throwable callbackFailure, Throwable originalError, Context context) {
  Exceptions.throwIfFatal(callbackFailure);
  Throwable _e = Operators.onOperatorError(null, callbackFailure, originalError, context);
  Operators.onErrorDropped(_e, context);
}

代码示例来源:origin: reactor/reactor-core

@Override
public void onNext(T t) {
  produced++;
  actual.onNext(t);
  Publisher<? extends T> p;
  try {
    p = Objects.requireNonNull(expander.apply(t),
        "The expander returned a null Publisher");
  }
  catch (Throwable ex) {
    Exceptions.throwIfFatal(ex);
    super.cancel();
    actual.onError(ex);
    drainQueue();
    return;
  }
  queue.offer(p);
}

代码示例来源:origin: reactor/reactor-core

@Override
final public boolean isEmpty() {
  try {
    return qs.isEmpty();
  }
  catch (Throwable ex) {
    Exceptions.throwIfFatal(ex);
    throw Exceptions.propagate(fail(ex));
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
public final void onComplete() {
  Subscription s = S.getAndSet(this, Operators.cancelledSubscription());
  if (s == Operators.cancelledSubscription()) {
    return;
  }
  if (completeConsumer != null) {
    try {
      completeConsumer.run();
    }
    catch (Throwable t) {
      Exceptions.throwIfFatal(t);
      onError(t);
    }
  }
}

代码示例来源:origin: reactor/reactor-core

void waitTaskEvent() {
  Event<T> event;
  while ((event = taskEvents.poll()) != null) {
    try {
      if (event instanceof SubscriptionTaskEvent) {
        updateRequested(event);
      }
      ((TaskEvent<T>) event).run(this);
    }
    catch (Throwable t) {
      Exceptions.throwIfFatal(t);
      cancel();
      if (t instanceof AssertionError) {
        throw (AssertionError) t;
      }
      throw Exceptions.propagate(t);
    }
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
  @Nullable
  final public T poll() {
    try {
      return qs.poll();
    }
    catch (final Throwable ex) {
      Exceptions.throwIfFatal(ex);
      throw Exceptions.propagate(fail(ex));
    }
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
public void subscribe(CoreSubscriber<? super T> actual) {
  BaseSink<T> sink = createSink(actual, backpressure);
  actual.onSubscribe(sink);
  try {
    source.accept(
        createMode == CreateMode.PUSH_PULL ? new SerializedSink<>(sink) :
            sink);
  }
  catch (Throwable ex) {
    Exceptions.throwIfFatal(ex);
    sink.error(Operators.onOperatorError(ex, actual.currentContext()));
  }
}

代码示例来源:origin: reactor/reactor-core

@Override
public void onNext(T t) {
  if (done || cancelled) {
    Operators.onNextDropped(t, currentContext());
    return;
  }
  if (!queue.offer(t)) {
    Throwable ex = Operators.onOperatorError(null,
        Exceptions.failWithOverflow(), t, currentContext());
    if(onOverflow != null) {
      try {
        onOverflow.accept(t);
      }
      catch (Throwable e) {
        Exceptions.throwIfFatal(e);
        ex.initCause(e);
      }
    }
    onError(Operators.onOperatorError(null, ex, t, currentContext()));
    return;
  }
  drain();
}

相关文章