Details
-
Type:
Bug
-
Status: Resolved
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.19.0, 2.19.1
-
Component/s: camel-http4
-
Labels:None
-
Patch Info:Patch Available
-
Estimated Complexity:Moderate
-
External issue URL:
-
External issue ID:
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
Issue Links
- links to