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);
}
/**