Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-11509

Cannot set content type with parameters without specifying charset

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.19.0, 2.19.1
    • 2.19.2, 2.20.0
    • camel-http4
    • None

    Description

      When setting a content type that does not contain a charset parameter, for example this:

      .setHeader("Content-Type", constant("application/json;odata=verbose"))
      

      the route will fail with the following exception:

      java.lang.IllegalArgumentException: MIME type may not contain reserved characters
      	at org.apache.http.util.Args.check(Args.java:36)
      	at org.apache.http.entity.ContentType.create(ContentType.java:206)
      	at org.apache.http.entity.ContentType.create(ContentType.java:218)
      	at org.apache.camel.component.http4.HttpProducer.createRequestEntity(HttpProducer.java:511)
      

      although this is clearly a valid content type according to the RFC: https://tools.ietf.org/html/rfc2045#section-5.1

      This only affects version 2.19+, because in version 4.4.6 of the httpcomponents-core library, they changed the behavior of create to check the mime type for semicolons, which it previously didn't. If we, however, also use a charset parameter, you will call the parse method instead:

      if (contentTypeString != null) {
          if (contentTypeString.indexOf("charset") > 0) {
              contentType = ContentType.parse(contentTypeString);
          } else {
              contentType = ContentType.create(contentTypeString);
          }
      }
      

      There can be all kind of different parameters, though. Instead of checking for charset, it should rather check for the existence of a semicolon.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            onders Onder Sezgin
            sflor Steffen F.
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment