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 2019/06/25 09:24:16 UTC

[camel] branch master updated: camel3 - Make Component and DataFormat API as Service as we should also manage their lifecycle with the service contract.

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 7518aa5  camel3 - Make Component and DataFormat API as Service as we should also manage their lifecycle with the service contract.
7518aa5 is described below

commit 7518aa587c0b887d7e071d6c64c14d91bd0d0e67
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Jun 25 10:42:33 2019 +0200

    camel3 - Make Component and DataFormat API as Service as we should also manage their lifecycle with the service contract.
---
 MIGRATION.md                                       |  4 ++-
 .../blueprint/BlueprintComponentResolverTest.java  | 13 +++++++-
 .../mime/multipart/MimeMultipartDataFormat.java    |  4 +--
 .../src/main/java/org/apache/camel/Component.java  |  2 +-
 .../main/java/org/apache/camel/spi/DataFormat.java |  5 ++-
 .../camel/core/osgi/OsgiComponentResolverTest.java | 13 +++++++-
 .../core/osgi/OsgiDataFormatResolverTest.java      |  4 +--
 .../impl/DefaultCamelContextResolverTest.java      |  3 +-
 .../impl/transformer/TransformerContractTest.java  |  5 ++-
 .../impl/transformer/TransformerRouteTest.java     |  5 ++-
 .../apache/camel/support/DefaultDataFormat.java    | 36 ++++++++++++++++++++++
 11 files changed, 76 insertions(+), 18 deletions(-)

diff --git a/MIGRATION.md b/MIGRATION.md
index 251eb9e..66250d0 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -264,7 +264,9 @@ The classes `ReloadStrategySupport` and `FileWatcherReloadStrategy` has been rem
 
 The `MessageHistoryFactory` interface has some options to filter and copy the message and a slight change in its API.
 
-Remove 'TypeConverterAware' as you shoudld instead use `Exchange` as parameter to the type converter method.
+Removed `TypeConverterAware` as you shoudld instead use `Exchange` as parameter to the type converter method.
+
+The `Component` and `DataFormat` interfaces now extend `Service` as components and data formats should also have service contract to manage their lifecycle. The default base classes already implements these interfaces.
 
 #### camel-test
 
diff --git a/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintComponentResolverTest.java b/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintComponentResolverTest.java
index 3195158..db10c35 100644
--- a/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintComponentResolverTest.java
+++ b/components/camel-blueprint/src/test/java/org/apache/camel/blueprint/BlueprintComponentResolverTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.support.DefaultRegistry;
+import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.test.junit4.TestSupport;
 import org.junit.Test;
 
@@ -57,7 +58,7 @@ public class BlueprintComponentResolverTest extends TestSupport {
         assertFalse("We should NOT find the fallback component", ((SampleComponent) component).isFallback());
     }
 
-    private static class SampleComponent implements Component {
+    private static class SampleComponent extends ServiceSupport implements Component {
 
         private boolean fallback;
 
@@ -97,6 +98,16 @@ public class BlueprintComponentResolverTest extends TestSupport {
         public void setFallback(boolean fallback) {
             this.fallback = fallback;
         }
+
+        @Override
+        protected void doStart() throws Exception {
+            // noop
+        }
+
+        @Override
+        protected void doStop() throws Exception {
+            // noop
+        }
     }
 
 }
diff --git a/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java b/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java
index 9af0771..975902f 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormat.java
@@ -48,9 +48,9 @@ import org.apache.camel.Attachment;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.NoTypeConversionAvailableException;
-import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.annotations.Dataformat;
 import org.apache.camel.support.DefaultAttachment;
+import org.apache.camel.support.DefaultDataFormat;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.util.IOHelper;
@@ -58,7 +58,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Dataformat("mime-multipart")
-public class MimeMultipartDataFormat implements DataFormat {
+public class MimeMultipartDataFormat extends DefaultDataFormat {
     private static final Logger LOG = LoggerFactory.getLogger(MimeMultipartDataFormat.class);
     private static final String MIME_VERSION = "MIME-Version";
     private static final String CONTENT_TYPE = "Content-Type";
diff --git a/core/camel-api/src/main/java/org/apache/camel/Component.java b/core/camel-api/src/main/java/org/apache/camel/Component.java
index 39c4010..9909f3c 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Component.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Component.java
@@ -27,7 +27,7 @@ import org.apache.camel.component.extension.ComponentExtension;
  * A <a href="http://camel.apache.org/component.html">component</a> is
  * a factory of {@link Endpoint} objects.
  */
-public interface Component extends CamelContextAware {
+public interface Component extends CamelContextAware, Service {
 
     /**
      * Attempt to resolve an endpoint for the given URI if the component is
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/DataFormat.java b/core/camel-api/src/main/java/org/apache/camel/spi/DataFormat.java
index d8e8250..ffba850 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/DataFormat.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/DataFormat.java
@@ -21,6 +21,7 @@ import java.io.OutputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
+import org.apache.camel.Service;
 
 /**
  * Represents a
@@ -29,9 +30,7 @@ import org.apache.camel.Message;
  * such as Java Serialization or using JAXB2 to encode/decode objects using XML
  * or using SOAP encoding.
  */
-public interface DataFormat {
-
-    // TODO: DataFormats should extends Service like the others
+public interface DataFormat extends Service {
 
     /**
      * Marshals the object to the given Stream.
diff --git a/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java b/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java
index 11a4d39..1a12a13 100644
--- a/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java
+++ b/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.component.file.FileComponent;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.support.DefaultRegistry;
+import org.apache.camel.support.service.ServiceSupport;
 import org.junit.Test;
 
 public class OsgiComponentResolverTest extends CamelOsgiTestSupport {
@@ -66,7 +67,7 @@ public class OsgiComponentResolverTest extends CamelOsgiTestSupport {
         assertFalse("We should NOT find the fallback component", ((SampleComponent) component).isFallback());
     }
 
-    private static class SampleComponent implements Component {
+    private static class SampleComponent extends ServiceSupport implements Component {
 
         private boolean fallback;
 
@@ -106,6 +107,16 @@ public class OsgiComponentResolverTest extends CamelOsgiTestSupport {
         public void setFallback(boolean fallback) {
             this.fallback = fallback;
         }
+
+        @Override
+        protected void doStart() throws Exception {
+            // noop
+        }
+
+        @Override
+        protected void doStop() throws Exception {
+            // noop
+        }
     }
 
 }
diff --git a/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java b/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java
index cff796f..dab6602 100644
--- a/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java
+++ b/core/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java
@@ -24,12 +24,12 @@ import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.support.DefaultDataFormat;
 import org.apache.camel.support.DefaultRegistry;
 import org.junit.Test;
 
 public class OsgiDataFormatResolverTest extends CamelOsgiTestSupport {
 
-
     @Test
     public void testOsgiResolverFindDataFormatFallbackTest() throws Exception {
         Registry registry = new DefaultRegistry();
@@ -58,7 +58,7 @@ public class OsgiDataFormatResolverTest extends CamelOsgiTestSupport {
         assertFalse("We should NOT find the fallback dataformat", ((SampleDataFormat) dataformat).isFallback());
     }
 
-    private static class SampleDataFormat implements DataFormat {
+    private static class SampleDataFormat extends DefaultDataFormat {
 
         private boolean fallback;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextResolverTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextResolverTest.java
index fff7356..32b58f1 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextResolverTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextResolverTest.java
@@ -30,6 +30,7 @@ import org.apache.camel.Predicate;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Language;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.DefaultDataFormat;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -168,7 +169,7 @@ public class DefaultCamelContextResolverTest {
         }
     }
 
-    public static class SampleDataFormat implements DataFormat {
+    public static class SampleDataFormat extends DefaultDataFormat {
 
         private boolean fallback;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java
index 6103e53..50948dd 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java
@@ -23,7 +23,6 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 
-import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
@@ -31,9 +30,9 @@ import org.apache.camel.TypeConverters;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.DataTypeAware;
+import org.apache.camel.support.DefaultDataFormat;
 import org.junit.Test;
 
 public class TransformerContractTest extends ContextTestSupport {
@@ -144,7 +143,7 @@ public class TransformerContractTest extends ContextTestSupport {
     public static class MyDataFormatDefinition extends DataFormatDefinition {
 
         public MyDataFormatDefinition() {
-            super(new DataFormat() {
+            super(new DefaultDataFormat() {
                 @Override
                 public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
                     assertEquals(B.class, graph.getClass());
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java
index 1e7d416..174145f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java
@@ -23,7 +23,6 @@ import java.io.OutputStream;
 import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
-import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Converter;
@@ -37,12 +36,12 @@ import org.apache.camel.TypeConverters;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.DataTypeAware;
 import org.apache.camel.spi.Transformer;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.DefaultDataFormat;
 import org.apache.camel.support.DefaultEndpoint;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Test;
@@ -251,7 +250,7 @@ public class TransformerRouteTest extends ContextTestSupport {
     public static class MyJsonDataFormatDefinition extends DataFormatDefinition {
 
         public MyJsonDataFormatDefinition() {
-            super(new DataFormat() {
+            super(new DefaultDataFormat() {
                 @Override
                 public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
                     assertEquals(graph.toString(), XOrderResponse.class, graph.getClass());
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultDataFormat.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultDataFormat.java
new file mode 100644
index 0000000..42e2a1c
--- /dev/null
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultDataFormat.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.support;
+
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.support.service.ServiceSupport;
+
+/**
+ * A default dataformat useful for implementation inheritance.
+ */
+public abstract class DefaultDataFormat extends ServiceSupport implements DataFormat {
+
+    @Override
+    protected void doStart() throws Exception {
+        // noop
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        // noop
+    }
+}