[ 
https://issues.apache.org/jira/browse/CAMEL-26024?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-26024 started by Claus Ibsen.
-------------------------------------------
> camel-telegram - media from a byte array only, TEXT bytes sent as a document, 
> and answers with ok=false
> -------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26024
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26024
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-telegram
>    Affects Versions: 4.18.0, 4.22.0, 4.23.0
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 4.24.0
>
>
> Found while checking the body types of the telegram component for the catalog 
> (CAMEL-24961).
> h4. 1. A byte array with the media type TEXT is sent as a document
> A byte array with {{CamelTelegramMediaType=TEXT}} is sent as a document named 
> "file": TEXT falls into the DOCUMENT branch of the switch 
> ({{TelegramConverter}}, main 07d2e7a987bc, lines 164-165).
> Checked on 4.24.0-SNAPSHOT with {{camel run}} and a fake Bot API: the request 
> went to {{sendDocument}} as multipart.
> *Proposed change*: send the bytes as a text message, decoded in the charset 
> of the exchange.
> h4. 2. A stream or a file cannot be sent as media
> Only a byte array can be sent as media. Any other body goes through the 
> converter from Object, which makes it a String first ({{TelegramConverter}}, 
> main 07d2e7a987bc, line 57), so a stream, a file or a stream cache with 
> {{CamelTelegramMediaType=PHOTO_PNG}} fails with "Unsupported conversion from 
> String to media type PHOTO_PNG" (line 93).
> Checked on 4.24.0-SNAPSHOT with {{camel run}}: a ByteArrayInputStream body 
> with PHOTO_PNG failed with a TypeConversionException caused by that 
> IllegalArgumentException; the same content as a byte array was sent with 
> {{sendPhoto}}.
> *Proposed change*: read a stream or a file as bytes when the media type 
> header names a media type other than TEXT.
> h4. 3. A message without text is sent back as the toString() of the 
> IncomingMessage
> For a message without text, such as a photo, the conversion of an 
> {{IncomingMessage}} to a String gives null ({{TelegramConverter.toString}}, 
> main 07d2e7a987bc, line 49), so Camel falls back to its {{toString()}}. A 
> route that sends a received message back, as in the chat bot example of the 
> docs, then sends that Java text to the chat.
> Checked on 4.24.0-SNAPSHOT with {{camel run}} and a fake Bot API, with 
> {{from: telegram:bots}} and {{to: telegram:bots}}: the photo update was sent 
> back as the text {{IncomingMessage{messageId=2, date=..., text='null', ... 
> photo=[IncomingPhotoSize{fileId='f1', ...}]...}}}.
> *Proposed change*: send nothing for a message without text (as for a null 
> body), or fail with an error that says the message has no text.
> h4. 4. An answer with ok=false is not an error
> An answer with HTTP 200 and {{"ok":false}} is not an error: the body becomes 
> a {{MessageResult}} with {{ok=false}} and no message, and the exchange 
> completes ({{TelegramAsyncHandler}}, main 07d2e7a987bc, lines 99-108 check 
> the HTTP status only).
> Checked on 4.24.0-SNAPSHOT with {{camel run}} and a fake {{sendLocation}} 
> that answered {{{"ok":false,"description":"Bad Request: wrong latitude"}}}: 
> the body was {{MessageResult{ok=false, message=null}}} and no exception was 
> raised.
> *Proposed change*: fail the exchange with the description of the answer when 
> {{ok}} is false.
> h4. Also read in the code, not run
> * The request body is limited to {{bufferSize}}, 1 MB by default, in a 
> ByteBuffer of that size ({{TelegramBodyPublisher}}, lines 127-134), so larger 
> media fail with a BufferOverflowException, and every send allocates the whole 
> buffer.
> * The multipart parts declare UTF-8, but {{TelegramBodyPublisher}} writes 
> them with {{getBytes()}} in the platform charset (line 57 and others).
> _Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to