Re: Setting rest response json directly

2014-12-02 Thread Claus Ibsen
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

2014-11-09 Thread Gary Kennedy
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

2014-11-05 Thread Gary Kennedy
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.