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);
+                    }
                 }
             }
         };

Reply via email to