You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/09/25 12:48:01 UTC

camel git commit: CAMEL-9157: Lifecycle of data format to be handled by marshal/unmarshal instead of in rest-dsl setup

Repository: camel
Updated Branches:
  refs/heads/master 8e69a3f7a -> 74b149850


CAMEL-9157: Lifecycle of data format to be handled by marshal/unmarshal instead of in rest-dsl setup


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/74b14985
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/74b14985
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/74b14985

Branch: refs/heads/master
Commit: 74b149850d4150311eb7894ae9e2aa2695be45f6
Parents: 8e69a3f
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Sep 25 12:21:43 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Sep 25 12:21:43 2015 +0200

----------------------------------------------------------------------
 .../camel/model/rest/RestBindingDefinition.java |  8 ++-----
 .../processor/binding/RestBindingProcessor.java | 25 +++++++++++++++++---
 2 files changed, 24 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/74b14985/camel-core/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java
index a7f01d9..d2936de 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java
@@ -100,7 +100,7 @@ public class RestBindingDefinition extends NoOutputDefinition<RestBindingDefinit
 
         if (mode == null || "off".equals(mode)) {
             // binding mode is off, so create a off mode binding processor
-            return new RestBindingProcessor(null, null, null, null, consumes, produces, mode, skip, cors, corsHeaders);
+            return new RestBindingProcessor(context, null, null, null, null, consumes, produces, mode, skip, cors, corsHeaders);
         }
 
         // setup json data format
@@ -134,7 +134,6 @@ public class RestBindingDefinition extends NoOutputDefinition<RestBindingDefinit
                 IntrospectionSupport.setProperty(context.getTypeConverter(), json, "useList", type.endsWith("[]"));
             }
             setAdditionalConfiguration(config, context, json, "json.in.");
-            context.addService(json);
 
             Class<?> outClazz = null;
             if (outType != null) {
@@ -146,7 +145,6 @@ public class RestBindingDefinition extends NoOutputDefinition<RestBindingDefinit
                 IntrospectionSupport.setProperty(context.getTypeConverter(), outJson, "useList", outType.endsWith("[]"));
             }
             setAdditionalConfiguration(config, context, outJson, "json.out.");
-            context.addService(outJson);
         }
 
         // setup xml data format
@@ -180,7 +178,6 @@ public class RestBindingDefinition extends NoOutputDefinition<RestBindingDefinit
                 IntrospectionSupport.setProperty(context.getTypeConverter(), jaxb, "context", jc);
             }
             setAdditionalConfiguration(config, context, jaxb, "xml.in.");
-            context.addService(jaxb);
 
             Class<?> outClazz = null;
             if (outType != null) {
@@ -196,10 +193,9 @@ public class RestBindingDefinition extends NoOutputDefinition<RestBindingDefinit
                 IntrospectionSupport.setProperty(context.getTypeConverter(), outJaxb, "context", jc);
             }
             setAdditionalConfiguration(config, context, outJaxb, "xml.out.");
-            context.addService(outJaxb);
         }
 
-        return new RestBindingProcessor(json, jaxb, outJson, outJaxb, consumes, produces, mode, skip, cors, corsHeaders);
+        return new RestBindingProcessor(context, json, jaxb, outJson, outJaxb, consumes, produces, mode, skip, cors, corsHeaders);
     }
 
     private void setAdditionalConfiguration(RestConfiguration config, CamelContext context, 

http://git-wip-us.apache.org/repos/asf/camel/blob/74b14985/camel-core/src/main/java/org/apache/camel/processor/binding/RestBindingProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/binding/RestBindingProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/binding/RestBindingProcessor.java
index 8a0de0d..df5e5e1 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/binding/RestBindingProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/binding/RestBindingProcessor.java
@@ -21,6 +21,8 @@ import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Route;
@@ -34,6 +36,7 @@ import org.apache.camel.util.AsyncProcessorHelper;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.MessageHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ServiceHelper;
 
 /**
  * A {@link org.apache.camel.Processor} that binds the REST DSL incoming and outgoing messages
@@ -44,6 +47,7 @@ import org.apache.camel.util.ObjectHelper;
  */
 public class RestBindingProcessor extends ServiceSupport implements AsyncProcessor {
 
+    private final CamelContext camelContext;
     private final AsyncProcessor jsonUnmarshal;
     private final AsyncProcessor xmlUnmarshal;
     private final AsyncProcessor jsonMarshal;
@@ -55,12 +59,14 @@ public class RestBindingProcessor extends ServiceSupport implements AsyncProcess
     private final boolean enableCORS;
     private final Map<String, String> corsHeaders;
 
-    public RestBindingProcessor(DataFormat jsonDataFormat, DataFormat xmlDataFormat,
+    public RestBindingProcessor(CamelContext camelContext, DataFormat jsonDataFormat, DataFormat xmlDataFormat,
                                 DataFormat outJsonDataFormat, DataFormat outXmlDataFormat,
                                 String consumes, String produces, String bindingMode,
                                 boolean skipBindingOnErrorCode, boolean enableCORS,
                                 Map<String, String> corsHeaders) {
 
+        this.camelContext = camelContext;
+
         if (jsonDataFormat != null) {
             this.jsonUnmarshal = new UnmarshalProcessor(jsonDataFormat);
         } else {
@@ -212,12 +218,25 @@ public class RestBindingProcessor extends ServiceSupport implements AsyncProcess
 
     @Override
     protected void doStart() throws Exception {
-        // noop
+        // inject CamelContext before starting
+        if (jsonMarshal instanceof CamelContextAware) {
+            ((CamelContextAware) jsonMarshal).setCamelContext(camelContext);
+        }
+        if (jsonUnmarshal instanceof CamelContextAware) {
+            ((CamelContextAware) jsonUnmarshal).setCamelContext(camelContext);
+        }
+        if (xmlMarshal instanceof CamelContextAware) {
+            ((CamelContextAware) xmlMarshal).setCamelContext(camelContext);
+        }
+        if (xmlUnmarshal instanceof CamelContextAware) {
+            ((CamelContextAware) xmlUnmarshal).setCamelContext(camelContext);
+        }
+        ServiceHelper.startServices(jsonMarshal, jsonUnmarshal, xmlMarshal, xmlUnmarshal);
     }
 
     @Override
     protected void doStop() throws Exception {
-        // noop
+        ServiceHelper.stopServices(jsonMarshal, jsonUnmarshal, xmlMarshal, xmlUnmarshal);
     }
 
     /**