I have swapped out a route previously using http4 directly for the more succinct newly released producer DSL.
What was working as: from("direct:getCounter") .routeId("i4ip-Get-Counter") .setHeader("CamelHttpMethod", constant("PUT")) .to("http4://{{counter.service.host}}:{{counter.service.port}}/api/counter/{{counter.name}}") .unmarshal().json(JsonLibrary.Jackson,CounterPojo.class) .setBody().simple("${body.getCounter()}") .convertBodyTo(Integer.class) .log(LoggingLevel.INFO, "returned ${body} for counter: {{counter.name}}") ; I changed to: restConfiguration().host("{{counter.service.host}}").port("{{counter.service.port}}"); from("direct:getCounter") .routeId("i4ip-Get-Counter") *.setHeader("CamelHttpMethod", constant(HttpMethods.PUT))* .to("rest:*put*:api/counter/{{counter.name}}") .unmarshal().json(JsonLibrary.Jackson,CounterPojo.class) .setBody().simple("${body.getCounter()}") .convertBodyTo(Integer.class) .log(LoggingLevel.INFO, "returned ${body} for counter: {{counter.name}}") ; } I was getting a 404 because the PUT request was being transformed to a POST since http4/HttpMethodHelper <https://github.com/apache/camel/blob/master/components/camel-http4/src/main/java/org/apache/camel/component/http4/helper/HttpMethodHelper.java> turns a request to POST if there is a payload. My PUT has a payload but it the method in the URI is ignored. However you can manually set the header as above and it works fine. Not sure whether this is for non http4 libraries. The example in the camel source code for the DSL producer is just a GET. https://github.com/apache/camel/tree/master/examples/camel-example-rest-producer -- View this message in context: http://camel.465427.n5.nabble.com/2-19-0-Rest-Producer-DSL-http4-support-for-PUT-workaround-tp5799706.html Sent from the Camel - Users mailing list archive at Nabble.com.