[
https://issues.apache.org/jira/browse/CAMEL-8104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14235294#comment-14235294
]
Espen Tjonneland commented on CAMEL-8104:
-----------------------------------------
I wonder if there is still missing some bits here. And I am guessing it is
failing due to it being done inside an interceptor.
Consider the following route def:
{code}
public class MyRestRouteDefs extends RouteBuilder {
imports .....;
@Override
public void configure() {
..... config stuff
interceptFrom().id("Create an error")
.bean(CreateAnError.class); //Sets up one interceptor that always
creates an error message - just to clarify this issue
restConfiguration().component("servlet").bindingMode(RestBindingMode.json)
.contextPath("/MyContext/api/").port("8080");
RestDefinition privateAPI =
rest(ServiceConstants.PRIVATE_API_VERSION_1).description("Private (internal)
REST services for MyServices.")
.skipBindingOnErrorCode(true); //Not neccecary (for clarity)
privateAPI.get("/fetchsomething").description("Lists stuff from some
service")
.outTypeList(MyPojoForSomething.class)
.route().routeId("A descriptive ID")
.choice()
.when(header(ServiceConstants.REQUEST_VALIDATED).isEqualTo("TRUE"))
.bean(GoAheadAndFillAMyPojoForSomething-into-body.class)
.otherwise()); //Otherwise might not be needed. Added it there
to show that it is a branching point.
}
}
public class CreateAnError {
imports .....;
@Handler
public void createAnError (@Body Message requestMessage) {
requestMessage.setHeader(ServiceConstants.REQUEST_VALIDATED, "FALSE");
requestMessage.setHeader(Exchange.HTTP_RESPONSE_CODE,
HttpServletResponse.SC_FORBIDDEN);
requestMessage.setHeader(Exchange.CONTENT_TYPE, "text/plain");
requestMessage.setBody("I raised this error inside an interceptor and
just wanted to tell you about it");
}
}
{code}
This results in an error:
{code}
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Missing':
was expecting ('true', 'false' or 'null')
at [Source: java.io.ByteArrayInputStream@67618968; line: 1, column: 9]
at
com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1419)
{code}
> rest-dsl - Allow custom error responses as-is without invoking the output
> binding
> ---------------------------------------------------------------------------------
>
> Key: CAMEL-8104
> URL: https://issues.apache.org/jira/browse/CAMEL-8104
> Project: Camel
> Issue Type: Improvement
> Components: camel-core
> Affects Versions: 2.14.0
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Fix For: 2.14.1, 2.15.0
>
>
> See
> http://camel.465427.n5.nabble.com/Rest-DSL-OutType-in-case-of-error-message-problem-tp5759864.html
> We should allow end users to define custom error messages as-is to be used as
> response.
> We add a flag that enables this out of the box. Then the end user just set a
> custom body and set the HTTP_RESPONSE_CODE header to >= 300 value to indicate
> an error. Then rest-dsl does not attempt to bind output.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)