Fyodor Kravchenko created CAMEL-19500:
-----------------------------------------

             Summary: HttpMessage#getBody(Map.class) doesn't parse the regular 
web form POST
                 Key: CAMEL-19500
                 URL: https://issues.apache.org/jira/browse/CAMEL-19500
             Project: Camel
          Issue Type: Bug
          Components: camel-jetty, core
    Affects Versions: 3.20.4
         Environment: $ lsb_release -d
Description:    Ubuntu 22.04.2 LTS

$ java --version
openjdk 19.0.1 2022-10-18
OpenJDK Runtime Environment GraalVM CE 22.3.0 (build 19.0.1+10-jvmci-22.3-b08)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.0 (build 19.0.1+10-jvmci-22.3-b08, 
mixed mode, sharing) 
            Reporter: Fyodor Kravchenko
             Fix For: 3.x


In Camel 2, when the form was submitted, the payload was able to be presented 
as a {{java.util.Map}} like this:

 
{code:java}
Map map = httpMessage.getBody(Map.class);{code}
In Camel 3.20.4 this doesn't work.

 

I've created a [little github 
project|https://github.com/fedd/cameljettyformmap/tree/main/cameljettyformmap] 
to demonstrate and reproduce the error. In the project's 
[{{pom.xml}}|https://github.com/fedd/cameljettyformmap/blob/main/cameljettyformmap/pom.xml]
 file you can easily switch the Camel versions to see how version 2.24.0 
behaves as expected in a true Camel manner, and 3.20.4 does not.

In essence, the code to check the behavior is like below. {{form.html}} is a 
simplest POST web form. 


{code:java}

                        HttpMessage http = exchange.getIn(HttpMessage.class);
                        HttpServletRequest request = http.getRequest();
                        String method = request.getMethod();
                        if ("POST".equals(method) || "PUT".equals(method)) {
                            Map map = http.getBody(Map.class);
                            String string = http.getBody(String.class);
                            http.setHeader(Exchange.CONTENT_TYPE, "text/plain");
                            http.setBody("json: " + 
mapper.writeValueAsString(map) + ", and string:" + string);
                        } else {
                            http.setHeader(Exchange.CONTENT_TYPE, "text/html");
http.setBody(this.getClass().getResourceAsStream("form.html"));
                        } 
{code}

It should print the jsonified form POST payload, but doesn't for the Camel 3.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to