You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Remco Schoen <R....@topdesk.com> on 2016/10/14 14:36:20 UTC

No HTTP response when using onException with BeanValidationException

Hi,

I’m trying to use the REST DSL and do validation on the incoming object with the Bean Validation Component.

I have configured my Spring XML like this:

<onException>
  <exception>org.apache.camel.component.bean.validator.BeanValidationException</exception>
  <handled>
    <constant>true</constant>
  </handled>
  <setHeader headerName="Exchange.HTTP_RESPONSE_CODE">
    <constant>422</constant>
  </setHeader>
  <setBody>
    <simple>Validation error.\n\Message:\n${exception.message}</simple>
  </setBody>
</onException>

But when I use the Swagger UI to send a message to my endpoint, I get no body or HTTP response code. For other exceptions this approach works.

Should this work with this exception?

I’m using version 2.17.3

Kind regards,

Remco Schoen

Re: No HTTP response when using onException with BeanValidationException

Posted by Remco Schoen <R....@topdesk.com>.
Hi,

I did a little more testing and found that there seems to be a conflict in the headers.

When I add this to the XML it works:
<removeHeaders pattern="*”/>

I printed the headers, maybe that gives a clue.

“
{Accept=application/json, Accept-Encoding=gzip, deflate, Accept-Language=nl-nl, breadcrumbId=51099-1476544028839-0-2, CamelHttpCharacterEncoding=UTF-8, CamelHttpMethod=POST, CamelHttpPath=, CamelHttpQuery=null, CamelHttpServletRequest=Request(POST /custom_webapi/hello/world)@13b615ae, CamelHttpServletResponse=HTTP/1.1 200

, CamelHttpUri=/custom_webapi/hello/world, CamelHttpUrl=http://remco.local:8080/custom_webapi/hello/world, CamelServletContextPath=/custom_webapi/hello/world, Connection=keep-alive, Content-Length=3, Content-Type=application/json, Host=remco.local:8080, Origin=http://petstore.swagger.io, Referer=http://petstore.swagger.io/?url=http://remco.local:8080/custom_webapi/api-docs/helloWorld, User-Agent=Mozilla/5.0}
"

That would explain why in some cases it works, the request was already routed to another webserver, so the headers were already changed before the exception.

--

Met vriendelijke groet,


Remco Schoen

Op 14 okt. 2016, om 16:36 heeft Remco Schoen <R....@topdesk.com>> het volgende geschreven:

Hi,

I’m trying to use the REST DSL and do validation on the incoming object with the Bean Validation Component.

I have configured my Spring XML like this:

<onException>
 <exception>org.apache.camel.component.bean.validator.BeanValidationException</exception>
 <handled>
   <constant>true</constant>
 </handled>
 <setHeader headerName="Exchange.HTTP_RESPONSE_CODE">
   <constant>422</constant>
 </setHeader>
 <setBody>
   <simple>Validation error.\n\Message:\n${exception.message}</simple>
 </setBody>
</onException>

But when I use the Swagger UI to send a message to my endpoint, I get no body or HTTP response code. For other exceptions this approach works.

Should this work with this exception?

I’m using version 2.17.3

Kind regards,

Remco Schoen