apache/pulsar

[pulsar-functions-worker][api] returns non-descriptive Jersey error when sending invalid json

開放

#18,253 建立於 2022年10月28日

 (1 則留言) (0 個反應) (0 位負責人)Java (3,485 個分叉)batch import
Stalehelp wanted

倉庫指標

星標
 (13,697 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

Search before asking

  • I searched in the issues and found nothing similar.

Motivation

When sending invalid JSON to the pulsar-functions-worker API the response from the server looks like this:

{"servlet":"org.glassfish.jersey.servlet.ServletContainer-53f0d09c",
"message":"Bad Request",
"url":"/admin/v3/sinks/public/default/SinkTest",
"status":"400"}

The problem here is that there is no descriptive error message that shows the user that the sent JSON is either broken or could not be mapped correctly.

To reproduce the issue, start Pulsar in standalone mode and send an invalid sinkConfig json to the sink creation endpoint:

curl -X "POST" "http://localhost:8080/admin/v3/sinks/public/default/SinkTest" \
    -H "Accept: application/json" \
    -H 'Content-Type: multipart/form-data; charset=utf-8; boundary=__X_PAW_BOUNDARY__' \
    -F "sinkConfig={\"xyz\"};type=application/json" -vvv

Solution

The solution is to override the default ExceptionMapper from Jersey. Unfortunately,this seems to be a rather difficult problem, as we also include jersey-media-multipart and jersey-media-json-jackson: https://stackoverflow.com/a/30371823

Alternatives

No response

Anything else?

No response

Are you willing to submit a PR?

  • I'm willing to submit a PR!

貢獻者指南