Re: Setting rest response json directly
Hi From Camel 2.14.1 onwards we have made this easier with https://issues.apache.org/jira/browse/CAMEL-8104 So if you have a custom error message you just set the HTTP error code to a value 300+ and rest-dsl will not do output binding. There is a new option that is turned on by default, you can turn it off to use the old behavior. And the rest-dsl documentation has a little example in the bottom https://cwiki.apache.org/confluence/display/CAMEL/Rest+DSL On Sun, Nov 9, 2014 at 11:24 PM, Gary Kennedy g...@apnic.net wrote: I changed the way I used the servlet/rest component and it works for me now. I'm still using the same bean setup as before: reference id=httpService interface=org.osgi.service.http.HttpService/ bean id=camelServlet class=...CamelHttpTransportServlet/ bean id=registration class=...OsgiServletRegisterer init-method=register destory-method=unregister property name=alias value=/example/ property name=servletName value=MyServlet/ property name=servlet ref=camelServlet/ property name=httpService ref=httpService/ /bean But now I've dropped the rest part, and using servlet endpoints to start the routes: camelContext dataFormats json id=json .../ /dataFormats route from uri=servlet:///route?servletName=MyServlet/ unmarshal ref=json/ !-- lots of magic -- onException exceptionnet.me.MyException/exception handledconstanttrue/constant/handled !-- more magic -- setHeader headerName=Content-Type constantapplication/json/constant /setHeader setBody simple{ error: ${exception.message} }/simple /setBody /onException /route /camelContext The bonus to using this method is that the unmarshalling is covered by the in-route onException block as well. The downside is that now I have to work on the http method filtering (ie, making the route POST/GET specific). It might be easier to play with the consumes/produces part of the rest dsl to bring the above theory used above into the rest dsl. Anyways, Cheers, Gary -- View this message in context: http://camel.465427.n5.nabble.com/Setting-rest-response-json-directly-tp5758518p5758801.html Sent from the Camel - Users mailing list archive at Nabble.com. -- Claus Ibsen - Red Hat, Inc. Email: cib...@redhat.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen hawtio: http://hawt.io/ fabric8: http://fabric8.io/
Re: Setting rest response json directly
I changed the way I used the servlet/rest component and it works for me now. I'm still using the same bean setup as before: reference id=httpService interface=org.osgi.service.http.HttpService/ bean id=camelServlet class=...CamelHttpTransportServlet/ bean id=registration class=...OsgiServletRegisterer init-method=register destory-method=unregister property name=alias value=/example/ property name=servletName value=MyServlet/ property name=servlet ref=camelServlet/ property name=httpService ref=httpService/ /bean But now I've dropped the rest part, and using servlet endpoints to start the routes: camelContext dataFormats json id=json .../ /dataFormats route from uri=servlet:///route?servletName=MyServlet/ unmarshal ref=json/ !-- lots of magic -- onException exceptionnet.me.MyException/exception handledconstanttrue/constant/handled !-- more magic -- setHeader headerName=Content-Type constantapplication/json/constant /setHeader setBody simple{ error: ${exception.message} }/simple /setBody /onException /route /camelContext The bonus to using this method is that the unmarshalling is covered by the in-route onException block as well. The downside is that now I have to work on the http method filtering (ie, making the route POST/GET specific). It might be easier to play with the consumes/produces part of the rest dsl to bring the above theory used above into the rest dsl. Anyways, Cheers, Gary -- View this message in context: http://camel.465427.n5.nabble.com/Setting-rest-response-json-directly-tp5758518p5758801.html Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Setting rest response json directly
I'm using blueprint, but yes, it does not work. cml:setBody cml:simple{ exception: ${exception.message} }/cml:simple /cml:setBody Produces response content of: { \error\: \${exception.message}\ } Instead of: { error: ${exception.message} } I'm using the servlet/rest config, ie: camelContext restConfiguration component=servlet bindingMode=json/ rest consumes=application/json produces=application/json post route !-- lots of magic -- onException exceptionnet.me.MyException/exception handledconstanttrue/constant/handled !-- more magic -- setBody simple{ error: ${exception.message} }/simple /setBody /onException /route /post /rest /camelContext (Sorry. I should have included this snippet in the first email) Cheers, Gary -- View this message in context: http://camel.465427.n5.nabble.com/Setting-rest-response-json-directly-tp5758518p5758563.html Sent from the Camel - Users mailing list archive at Nabble.com.