Can you try and run it with undertow? I see test similar to your scenario in undertow.
https://github.com/apache/camel/tree/52443a298935b2842a402cb5fff7e37abb938f8b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow ચિરાગ/चिराग/Chirag ------------------------------------------ Sent from My Gmail Account On Wed, Jun 14, 2023 at 4:37 PM Fyodor Kravchenko <feddkr...@hotmail.com> wrote: > > The old-fashioned standard of the Servlet API required that the request > parameters were available through the request.getParameter* methods, > including the getParameterMap(), be that GET query parameters or the > POST form data load. > > Camel collects anything looking like a Map<String,Object> into the Camel > Message headers, mixing the HTTP request parameters, HTTP headers and > something else. It apparently continues to do so, however, somehow > clearing the HttpServletRequest.getParameter* results, but this isn't my > problem. It works the same way in Camel 2 and Camel 3.20.4 which I'm > trying to migrate to, and all inconsistencies are already worked around. > > My problem is that the Message.getBody(Map.class) behaviour has changed. > Try change Camel 3 to 2 in the pom.xml of the test project and the same > code will magically work as expected. > > > On 14.06.2023 19:25, Chirag wrote: > > if you introspect variables, the fields are not populated in > > HttpServletRequest object. The variables are added to the Camel > > Exchange Header. This may be something done within camel-jetty or one > > of the underlying libraries. > > > > the field are populated in the message header - but at that point, > > they are intermingled with Camel Headers, HTTP Headers > > > > Accept = > > text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 > > Accept-Encoding = gzip, deflate, br > > Accept-Language = en-US,en;q=0.9 > > Cache-Control = max-age=0 > > CamelHttpMethod = POST > > CamelHttpPath = > > CamelHttpQuery = null > > CamelHttpServletRequest = Request(POST //localhost:8080/)@37bc1f86 > > CamelHttpServletResponse = HTTP/1.1 200 > > > > > > CamelHttpUri = / > > CamelHttpUrl = http://localhost:8080/ > > CamelServletContextPath = / > > Connection = keep-alive > > Content-Length = 20 > > Content-Type = application/x-www-form-urlencoded > > Host = localhost:8080 > > login = aa > > Origin = http://localhost:8080 > > password = bb > > Referer = http://localhost:8080/ > > sec-ch-ua = "Not.A/Brand";v="8", "Chromium";v="114", "Microsoft > > Edge";v="114" > > sec-ch-ua-mobile = ?0 > > sec-ch-ua-platform = "Windows" > > Sec-Fetch-Dest = document > > Sec-Fetch-Mode = navigate > > Sec-Fetch-Site = same-origin > > Sec-Fetch-User = ?1 > > Upgrade-Insecure-Requests = 1 > > User-Agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) > > AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 > > Edg/114.0.1823.43 > > ---------------- End of Message Headers > > > > > > > > I couldn't see an easy method to convert > > username=something&password=something (that can possibly be a > > workaround). I would say go ahead and open a JIRA ; to see if this is > > really a bug. > > I did see a slightly different behaviour when I added > > disableStreamCache=true; but that did not seem to change other parts. > > I did try changing it to a multi-part form and then it showed up as > > multiple parts attached - but that would mean changing your approach > > completely. > > > > > > ચિરાગ/चिराग/Chirag > > ------------------------------------------ > > Sent from My Gmail Account > > On Wed, Jun 14, 2023 at 3:14 AM Fyodor Kravchenko <feddkr...@hotmail.com> > > wrote: > >> Hi Chirag, yeah that exactly is the question - it shouldn't be that way. > >> > >> If we change Camel version in the pom.xml to Camel 2.24, it'll work as > >> expected: the POST payload will be parsed into java.util.Map and the > >> Json will be generated (instead of "null"). > >> > >> So the question is -- how do i fix it for camel 3.20.4? > >> > >> On 13.06.2023 18:04, Chirag wrote: > >>> Hi Fyodor, > >>> I ran it in IntelliJ thru 3.20.4 > >>> > >>> after submitting page - i got > >>> > >>> json: null, and string:login=usrename&password=password > >>> > >>> > >>> ચિરાગ/चिराग/Chirag > >>> ------------------------------------------ > >>> Sent from My Gmail Account > >>> > >>> On Mon, Jun 12, 2023 at 7:35 AM Fyodor Kravchenko <feddkr...@hotmail.com> > >>> wrote: > >>>> Hello people, > >>>> > >>>> any ideas how to fix the issue below? > >>>> > >>>> -- fedd > >>>> > >>>> On 09.06.2023 18:15, Fyodor Kravchenko wrote: > >>>>> Hello, > >>>>> > >>>>> I've used to rely on this function in older Camel, when I was able to > >>>>> deserialize a regular web form POST stream into a generic > >>>>> java.util.Map, I mean, this used to parse the form data (not > >>>>> multipart, just regular) and convert into a Map: > >>>>> > >>>>> Map map = http.getBody(Map.class); > >>>>> > >>>>> This is my test code snippet that I compile and run on Java 19 of > >>>>> GraalVM: > >>>>> > >>>>> ``` > >>>>> > >>>>> 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")); > >>>>> } > >>>>> ``` > >>>>> > >>>>> I've created a test project to make sure it works on Camel 2.24 and > >>>>> doesn't in 3.20.4: > >>>>> > >>>>> https://github.com/fedd/cameljettyformmap/tree/main/cameljettyformmap > >>>>> > >>>>> I had to add `javax.activation` for the 2.24 version to run, but > >>>>> unfortunately that didn't fix the 3.20.4 (See the pom.xml in the > >>>>> github link) > >>>>> > >>>>> What do I have to do to make it work in 3.20.4? > >>>>> > >>>>> $ 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) > >>>>>