mapError

While similar to recover this operators can be used to transform an error signal to a different one without logging it as an error in the process.

Error handling

Signature

Source.mapErrorSource.mapError Flow.mapErrorFlow.mapError

Description

While similar to recover this operators can be used to transform an error signal to a different one without logging it as an error in the process. So in that sense it is NOT exactly equivalent to recover(t => throw t2) since recover would log the t2 error.

Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operators can recover the failure signal, but not the skipped elements, which will be dropped.

Similarly to recover throwing an exception inside mapError will be logged on ERROR level automatically.

Example

The following example demonstrates a stream which throws ArithmeticException when the element 0 goes through the map operator. ThemapError is used to transform this exception to UnsupportedOperationException.

Scala
sourceSource(-1 to 1)
  .map(1 / _)
  .mapError {
    case _: ArithmeticException =>
      new UnsupportedOperationException("Divide by Zero Operation is not supported.") with NoStackTrace
  }
  .runWith(Sink.seq)
  .onComplete {
    case Success(value) => println(value.mkString)
    case Failure(ex)    => println(ex.getMessage)
  }

// prints "Divide by Zero Operation is not supported."
Java
source
final ActorSystem system = ActorSystem.create("mapError-operator-example"); Source.from(Arrays.asList(-1, 0, 1)) .map(x -> 1 / x) .mapError( ArithmeticException.class, (ArithmeticException e) -> new UnsupportedOperationException("Divide by Zero Operation is not supported.")) .runWith(Sink.seq(), system) .whenComplete( (result, exception) -> { if (result != null) System.out.println(result.toString()); else System.out.println(exception.getMessage()); }); // prints "Divide by Zero Operation is not supported."

Reactive Streams semantics

emits when element is available from the upstream or upstream is failed and pf returns an element backpressures when downstream backpressures completes when upstream completes or upstream failed with exception pf can handle