Hi

You can reconfigure the simple language to use different start/end tokens.

But that said, we should probably relax the check for token pairs to
not complain for end tokens } without a starting token ${.
As thats the case in your JSON example.

Likewise we could consider having an escape character so you can do \}
to escape the end token to make it explicit.
And maybe for the start tokens as well, but thats a bit odd as most
people would never want ${ as output, eg \$\{



On Wed, May 9, 2012 at 11:44 AM, David Geary <david.ge...@aepona.com> wrote:
> Hi we have a route in camel for an HTTP Rest endpoint that returns JSON with
> the following exception handling to convert exceptions in the route to JSON
>
> <onException>
>    <onException>
>
> <exception>org.springframework.security.access.AccessDeniedException</exception>
>        <handled>
>            <constant>true</constant>
>        </handled>
>        <setHeader headerName="CamelHttpResponseCode">
>            <constant>403</constant>
>        </setHeader>
>        <setHeader headerName="Content-Type">
>            <constant>application/json</constant>
>        </setHeader>
>        <process ref="oAuth2TokenRevokeProcessor"/>
>            <transform>
>                <simple>{"error":"${exception.message}"}</simple>
>            </transform>
>      </onException>
> </onException>
>
> This was previously working, but has stopped working since we upgraded to
> camel 2.9.0 - we now get this exception
>
> org.apache.camel.language.simple.types.SimpleIllegalSyntaxException:
> functionEnd has no matching start token at location 31
> {"error":"${exception.message}"}
>                               *
>
>        at
> org.apache.camel.language.simple.SimpleExpressionParser.parseExpression(SimpleExpressionParser.java:50)[115:org.apache.camel.camel-core:2.9.0.fuse-beta-7-042]
>        at
>
> It seems camel no longer likes the closing curly bracket.
>
> So instead i tried using SPEL:
>
> <transform>
>    <spel>{"error":"#{exception.message}"}</spel>
> </transform>
>
> But this fails with
>
> org.apache.camel.ExpressionEvaluationException:
> org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos
> 10): Field or property 'message' cannot be found on null
>
> Ie SPEL cannot seem to see the exception even though the documentation for
> SPEL in camel says it should be avaliable.
>
> In the end we have it working like this:
>
> <transform>
>     <simple>${exception.message}</simple>
> </transform>
> <transform>
>      <spel>{"error":"#{request.body}"}</spel>
> </transform>
>
> But this seems overkill for such a simple case - is there a simpler way to
> do this?
>
> Should the simple expression fail the way it does with a closing curly
> bracket - this was OK before and obviously causes issues in JSON
>
> Why does SPEL think the exception is null?
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Translating-route-exceptions-to-JSON-with-Simple-Expression-Language-or-SPEL-tp5696933.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to