diff --git a/akka-projection-grpc/src/main/scala/akka/projection/grpc/internal/EventProducerServiceImpl.scala b/akka-projection-grpc/src/main/scala/akka/projection/grpc/internal/EventProducerServiceImpl.scala index 07d7c7a0e..4ad535ae5 100644 --- a/akka-projection-grpc/src/main/scala/akka/projection/grpc/internal/EventProducerServiceImpl.scala +++ b/akka-projection-grpc/src/main/scala/akka/projection/grpc/internal/EventProducerServiceImpl.scala @@ -39,9 +39,10 @@ import com.google.protobuf.timestamp.Timestamp import io.grpc.Status import org.slf4j.Logger import org.slf4j.LoggerFactory - import scala.concurrent.Future +import akka.projection.grpc.producer.scaladsl.EventProducer.Transformation + /** * INTERNAL API */ @@ -78,6 +79,10 @@ import scala.concurrent.Future eventsBySlicesPerStreamId.contains(s.streamId) || eventsBySlicesStartingFromSnapshotsPerStreamId.contains(s.streamId), s"No events by slices query defined for stream id [${s.streamId}]") + require( + s.transformation ne Transformation.empty, + s"Transformation is not defined for stream id [${s.streamId}]. " + + "Use Transformation.identity to pass through each event as is.") } private val protoAnySerialization = new ProtoAnySerialization(system) diff --git a/akka-projection-grpc/src/main/scala/akka/projection/grpc/producer/scaladsl/EventProducer.scala b/akka-projection-grpc/src/main/scala/akka/projection/grpc/producer/scaladsl/EventProducer.scala index 74950d374..ebe65168f 100644 --- a/akka-projection-grpc/src/main/scala/akka/projection/grpc/producer/scaladsl/EventProducer.scala +++ b/akka-projection-grpc/src/main/scala/akka/projection/grpc/producer/scaladsl/EventProducer.scala @@ -108,7 +108,10 @@ object EventProducer { val empty: Transformation = new Transformation( mappers = Map.empty, orElse = envelope => - Future.failed(new IllegalArgumentException(s"Missing transformation for event [${envelope.event.getClass}]"))) + Future.failed( + new IllegalArgumentException( + s"Missing transformation for event [${envelope.event.getClass}]. " + + "Use Transformation.identity to pass through each event as is."))) /** * No transformation. Pass through each event as is. diff --git a/docs/src/main/paradox/grpc.md b/docs/src/main/paradox/grpc.md index 33cb0ed75..b6bcdf195 100644 --- a/docs/src/main/paradox/grpc.md +++ b/docs/src/main/paradox/grpc.md @@ -145,6 +145,8 @@ Java To omit an event the transformation function can return @scala[`None`]@java[`Optional.empty()`]. +Use @scala[`Transformation.identity`]@java[`Transformation.identity()`] to pass through each event as is. + That `EventProducer` service is started in an Akka gRPC server like this: Scala