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 <davscl...@apache.org> Authored: Fri Sep 25 12:21:43 2015 +0200 Committer: Claus Ibsen <davscl...@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); } /**