dapr / dapr/java-sdk

Content-Type mismatch in publishEvent call

Open
#779 7 comments 0 reactions 1 assignee Claimed by @dangzitou View on GitHub
good first issue kind/bug P1 size/XS triaged/resolved
Dominant language
Java
Stars
300
Forks
230
Avg merge
1d 20h
Merged PRs (30d)
4

Description

## Expected Behavior

Content-Type mismatch in publishEvent call.

When a string event is published, using the
```java
client.publishEvent("pubsubName", "topicName", "This is message #0")
```
What is seen in the broker for publish using gRPC protocol is:
```
{"data":"This is message #0","datacontenttype":"application/json","expiration":"2022-09-14T07:34:04Z","id":"87bc9a7b-ab08-4e7a-8583-3f1e0433ab67","pubsubname":"kafka-pubsub","source":"test-batch-pub","specversion":"1.0","topic":"testingtopic","traceid":"00-6b8bfc12d6d2bb6c7e2f80503628f2b8-8a495373d49513aa-01","traceparent":"00-6b8bfc12d6d2bb6c7e2f80503628f2b8-8a495373d49513aa-01","tracestate":"","type":"com.dapr.event.sent"}
```
Here because the data is not given in the `client.publishEvent` call, it is being inferred by the default serializer as `application/json` and that is the `datacontenttype` field that is set in the cloudEvent in broker.

On subscription, the subscriber correctly reads the value and users see something like
```
Subscriber got: This is message #0
```

But when we publish the same data `This is message #0` with the publishEvent call with the content type correctly set
```java
PublishEventRequest req = new PublishEventRequest("pubsubName", "topicName", "This is message #0");
req.setContentType("text/plain");
client.publishEvent(req)
```

The data seen in the broker is such:
```
{"data":"\"This is message #0\"","datacontenttype":"text/plain","expiration":"2022-09-14T12:32:37Z","id":"e996716d-1d11-46d7-9112-6866cbb633ce","pubsubname":"kafka-pubsub","source":"test-batch-pub","specversion":"1.0","topic":"simpletest","traceid":"00-a58c282daed4035a660abbf14208cac2-283bb02770d94908-01","traceparent":"00-a58c282daed4035a660abbf14208cac2-283bb02770d94908-01","tracestate":"","type":"com.dapr.event.sent"}
```
and the subscriber actually gets `Subscriber got: "This is message #0"`

With the right content type given, the serialization is escaping the quotes. But when no content type is given, a wrong content type is assumed.

## Actual Behavior

Proper match should be there between datacontenttype field and the actually data field when saved as cloudEvent.

## Steps to Reproduce the Problem

send with the overloaded method of `publishEvent(pubsub, topic, data)` and `publishEvent(publishEventReq)` and set proper metadata for the full request.

## Release Note

RELEASE NOTE:

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.