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

Work on CAMEL-26053 started by Claus Ibsen.
-------------------------------------------
> camel-graphql - the headers of the message replace the JSON content type and 
> stay on the message after the call
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26053
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26053
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-graphql
>    Affects Versions: 4.22.0, 4.23.0
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.24.0
>
>
> Found while adding the catalog body types of graphql (CAMEL-24961), checked 
> with {{camel run}} against a fake GraphQL server made with platform-http. 
> Since CAMEL-22562 (4.19.0) the producer sends the request through an internal 
> camel-http endpoint and copies the headers of the message to it, and back.
> h4. 1. The headers of the message replace application/json
> The producer sets {{Content-Type}} and {{Accept}} to application/json and 
> then copies the headers of the message over them ({{GraphqlProducer}}, main 
> 5aac7df76b83, lines 95-99, {{MessageHelper.copyHeaders(..., true)}}). 
> camel-http builds the entity from the Content-Type header, so a route fed by 
> an HTTP consumer, which has a Content-Type of its own, sends the JSON request 
> with that type (a Content-Encoding header of the message would compress it 
> too; read in the code). Checked on 4.24.0-SNAPSHOT with {{camel run}}: with 
> Content-Type text/plain and Accept text/html on the message, the server got 
> the JSON with {{Content-Type: text/plain}} and {{Accept: text/html}}.
> *Proposed change*: set the request headers of the producer after copying the 
> headers of the message, or do not copy Content-Type, Accept and 
> Content-Encoding.
> h4. 2. The query header is sent as an HTTP header
> The header named by {{queryHeader}} is copied with the others, so the query 
> is also sent as an HTTP request header, which a long query can make too large 
> for the server (so is the header of {{variablesHeader}}; read in the code). 
> Checked on 4.24.0-SNAPSHOT with {{camel run}}: with queryHeader=myQuery, the 
> server got the {{myQuery}} HTTP header with the query.
> h4. 3. The method and Accept headers stay on the message
> After the call the headers of the HTTP exchange are copied back (line 112), 
> so the message keeps {{CamelHttpMethod=post}}, {{Accept=application/json}} 
> and {{Accept-Encoding=gzip}}. A later http producer without httpMethod then 
> sends a POST. Checked on 4.24.0-SNAPSHOT with {{camel run}}: after a graphql 
> step the message had CamelHttpMethod=post, Accept application/json, 
> Accept-Encoding gzip and Content-Type application/json.
> *Proposed change*: remove the headers the producer set for the request before 
> copying the response headers back.
> h4. 4. A Map body is sent as the text of the query
> Without the query, queryFile and queryHeader options the body is the query, 
> read with {{getMandatoryBody(String.class)}} (line 136), so a Map body, such 
> as the result of an unmarshal, is sent as its toString(). Checked on 
> 4.24.0-SNAPSHOT with {{camel run}}: a Map with the id 1 gave the query "id=1" 
> in braces, and a GraphQL server rejects it. Only a 
> {{org.apache.camel.util.json.JsonObject}} body is taken as the variables 
> (line 147).
> *Proposed change*: fail for a body that is not text, bytes, a stream or a 
> file.
> h4. Also read in the code, not run
> * A variables body that is a Map, but not a camel-util-json JsonObject, is 
> ignored without a conversion (line 147), while the header of variablesHeader 
> is converted (line 146).
> * {{graphql-component.adoc}} line 15 links Apache HttpClient 4.5; the 
> producer uses camel-http and HttpClient 5.
> _Claude Code on behalf of davsclaus_



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

Reply via email to