dapr / dapr/java-sdk

Outbox message should be in the CloudEvent format

Open
#1,580 4 comments 0 reactions 1 assignee Claimed by @mcruzdev View on GitHub
Dominant language
Java
Stars
300
Forks
230
Avg merge
1d 20h
Merged PRs (30d)
4

Description

## Context

Using the Outbox API:

```java
public Response createWithOutbox(OrderRequest request) {
Log.info("Receiving request for creating an Order: " + request);

String uuid = UUID.randomUUID().toString();

Order order = new Order(uuid,
request.items().stream().map(i -> new Order.OrderItem(i.id(), i.name(), i.price())).toList());

/* outbox.yaml: metadata.name */
ExecuteStateTransactionRequest transactionRequest = new ExecuteStateTransactionRequest("postgres-outbox");

List> ops = new ArrayList<>();

Map metadata = new HashMap<>();
metadata.put("datacontenttype", "application/json");

State state = new State<>(order.id(), order, null, metadata, new StateOptions(Consistency.STRONG, Concurrency.FIRST_WRITE));

TransactionalStateOperation upsertOps = new TransactionalStateOperation<>(
TransactionalStateOperation.OperationType.UPSERT, state);

ops.add(upsertOps);

transactionRequest.setOperations(ops);

dapr.executeStateTransaction(transactionRequest).block();

Log.info("Event (order.created) sent to 'rabbitmq' and order saved to the database using Outbox pattern");

return Response
.ok(new OrderResponse(order.id(), order.status(), order.items().stream()
.map(item -> new OrderRequest.OrderItemRequest(item.id(), item.name(), item.price())).toList()))
.build();
}
```

I am facing a wrong behavior, which is not the same as documented here https://docs.dapr.io/developing-applications/building-blocks/pubsub/pubsub-cloudevents/#dapr-generated-cloudevents-example

## Actual behavior

```json
{"data":"{\"id\":\"dd1f1122-cb3a-4dc4-8ab6-e16ff6599a61\",\"status\":\"RECEIVED\",\"items\":[{\"id\":1,\"name\":\"Quarkus Stickers\",\"price\":19.99}]}","datacontenttype":"text/plain","id":"outbox-06af412d-e21b-4151-8f25-9c6c7273a95c","pubsubname":"rabbitmq","source":"orders-api","specversion":"1.0","time":"2025-10-22T18:40:26Z","topic":"order.created","traceid":"00-dc2464c8d9432109a3d1f13469aa739a-ed59c9a3d2829220-01","traceparent":"","tracestate":"","type":"com.dapr.event.sent"}
```

## Expected behavior

```json
{"data": { "id": "dd1f1122-cb3a-4dc4-8ab6-e16ff6599a61","status":"RECEIVED","items":[{"id":1,"name":"Quarkus Stickers","price":19.99}]}","datacontenttype":"application/json","id":"outbox-06af412d-e21b-4151-8f25-9c6c7273a95c","pubsubname":"rabbitmq","source":"orders-api","specversion":"1.0","time":"2025-10-22T18:40:26Z","topic":"order.created","traceid":"00-dc2464c8d9432109a3d1f13469aa739a-ed59c9a3d2829220-01","traceparent":"","tracestate":"","type":"com.dapr.event.sent"}
```

The `data` field is coming as string not a object, I tried to use `cloudevent.datacontentype` but without success too.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.