You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by owain <ow...@integration.technology> on 2017/05/17 12:07:38 UTC

2.19.0 Rest Producer DSL http4 support for PUT workaround

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.

Re: 2.19.0 Rest Producer DSL http4 support for PUT workaround

Posted by owain <ow...@integration.technology>.
Done.

https://issues.apache.org/jira/browse/CAMEL-11293



--
View this message in context: http://camel.465427.n5.nabble.com/2-19-0-Rest-Producer-DSL-http4-support-for-PUT-workaround-tp5799706p5799725.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: 2.19.0 Rest Producer DSL http4 support for PUT workaround

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Ah yeah the put in the rest url should take precedence. Can you log a
JIRA ticket.


On Wed, May 17, 2017 at 2:07 PM, owain <ow...@integration.technology> wrote:
> 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.



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2