CAMEL-8995: camel-restlet - Should defer UoW done until after writing response
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a3b216df Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a3b216df Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a3b216df Branch: refs/heads/camel-2.15.x Commit: a3b216df5f7bb4e19365914b6e746e4999dadeaf Parents: 2f29f5d Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Jul 22 07:03:31 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Jul 22 07:04:02 2015 +0200 ---------------------------------------------------------------------- .../camel/component/restlet/RestletConsumer.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/a3b216df/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java index fd39ac8..fa1f847 100644 --- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java +++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletConsumer.java @@ -19,7 +19,6 @@ package org.apache.camel.component.restlet; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Processor; -import org.apache.camel.RuntimeCamelException; import org.apache.camel.impl.DefaultConsumer; import org.restlet.Request; import org.restlet.Response; @@ -50,10 +49,16 @@ public class RestletConsumer extends DefaultConsumer { return new Restlet() { @Override public void handle(Request request, Response response) { + // must call super according to restlet documentation + super.handle(request, response); + LOG.debug("Consumer restlet handle request method: {}", request.getMethod()); + Exchange exchange = null; try { - Exchange exchange = getEndpoint().createExchange(); + // we want to handle the UoW + exchange = getEndpoint().createExchange(); + createUoW(exchange); RestletBinding binding = getEndpoint().getRestletBinding(); binding.populateExchangeFromRestletRequest(request, response, exchange); @@ -65,8 +70,12 @@ public class RestletConsumer extends DefaultConsumer { } binding.populateRestletResponseFromExchange(exchange, response); - } catch (Exception e) { - throw new RuntimeCamelException("Cannot process request", e); + } catch (Throwable e) { + getExceptionHandler().handleException("Error processing request", exchange, e); + } finally { + if (exchange != null) { + doneUoW(exchange); + } } } };