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 2020/03/24 12:11:26 UTC

[camel-karaf] branch master updated (ccbab26 -> 2b47461)

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

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


    from ccbab26  Camel-Blueprint: Changed name to Camel Karaf
     new 6e53e99  CAMEL-14775: camel-cxf - Move OSGi blueprint out into camel-cxf-blueprint
     new 2b47461  Regen

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../services/org/apache/camel/other.properties     |   2 +-
 .../camel-cxf-blueprint}/pom.xml                   |  69 ++++----
 .../services/org/apache/camel/other.properties     |   7 +
 .../src/generated/resources/cxf-blueprint.json     |  12 ++
 .../blueprint/AbstractBeanDefinitionParser.java    |  62 +++++++
 .../component/cxf/blueprint/BlueprintSupport.java} |  21 +--
 .../cxf/blueprint/CxfBlueprintEndpoint.java        |  80 +++++++++
 .../cxf/blueprint/CxfNamespaceHandler.java         |  75 +++++++++
 .../cxf/blueprint/EndpointDefinitionParser.java    | 107 ++++++++++++
 .../cxf/blueprint/RsClientBlueprintBean.java       |  95 +++++++++++
 .../cxf/blueprint/RsClientDefinitionParser.java    |  93 +++++++++++
 .../cxf/blueprint/RsServerBlueprintBean.java       | 101 ++++++++++++
 .../cxf/blueprint/RsServerDefinitionParser.java    |  95 +++++++++++
 .../jaxrs/blueprint/CxfRsBlueprintEndpoint.java    |  95 +++++++++++
 .../CxfRsBlueprintEndpointFactoryBean.java}        |  23 +--
 .../resources/OSGI-INF/blueprint/camel-cxf.xml}    |  17 +-
 .../main/resources/schema/blueprint/camel-cxf.xsd  | 179 +++++++++++++++++++++
 components/pom.xml                                 |   1 +
 .../karaf/features/src/main/resources/features.xml |   1 +
 19 files changed, 1063 insertions(+), 72 deletions(-)
 copy {catalog/camel-catalog-provider-karaf => components/camel-cxf-blueprint}/pom.xml (54%)
 create mode 100644 components/camel-cxf-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties
 create mode 100644 components/camel-cxf-blueprint/src/generated/resources/cxf-blueprint.json
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java
 copy components/{camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MyProperties.java => camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/BlueprintSupport.java} (65%)
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfBlueprintEndpoint.java
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfNamespaceHandler.java
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientBlueprintBean.java
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerBlueprintBean.java
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java
 create mode 100644 components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpoint.java
 copy components/{camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BeanInjectTest.java => camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpointFactoryBean.java} (60%)
 copy components/{camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/beanStaticMethodRoute.xml => camel-cxf-blueprint/src/main/resources/OSGI-INF/blueprint/camel-cxf.xml} (68%)
 create mode 100644 components/camel-cxf-blueprint/src/main/resources/schema/blueprint/camel-cxf.xsd


[camel-karaf] 02/02: Regen

Posted by da...@apache.org.
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-karaf.git

commit 2b47461c698d8b36ba0de8cf0ac555bfffffcad5
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Mar 24 12:44:55 2020 +0100

    Regen
---
 .../resources/META-INF/services/org/apache/camel/other.properties       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/components/camel-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties
index fe9ebfd..57d6ecf 100644
--- a/components/camel-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ b/components/camel-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -3,5 +3,5 @@ name=blueprint
 groupId=org.apache.camel.karaf
 artifactId=camel-blueprint
 version=3.2.0-SNAPSHOT
-projectName=Camel :: Blueprint
+projectName=Camel Karaf :: Blueprint
 projectDescription=Using Camel with OSGi Blueprint


[camel-karaf] 01/02: CAMEL-14775: camel-cxf - Move OSGi blueprint out into camel-cxf-blueprint

Posted by da...@apache.org.
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-karaf.git

commit 6e53e99e334f02fb398327cf36df0771750a387a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Mar 24 12:17:04 2020 +0100

    CAMEL-14775: camel-cxf - Move OSGi blueprint out into camel-cxf-blueprint
---
 components/camel-cxf-blueprint/pom.xml             |  96 +++++++++++
 .../services/org/apache/camel/other.properties     |   7 +
 .../src/generated/resources/cxf-blueprint.json     |  12 ++
 .../blueprint/AbstractBeanDefinitionParser.java    |  62 +++++++
 .../component/cxf/blueprint/BlueprintSupport.java  |  32 ++++
 .../cxf/blueprint/CxfBlueprintEndpoint.java        |  80 +++++++++
 .../cxf/blueprint/CxfNamespaceHandler.java         |  75 +++++++++
 .../cxf/blueprint/EndpointDefinitionParser.java    | 107 ++++++++++++
 .../cxf/blueprint/RsClientBlueprintBean.java       |  95 +++++++++++
 .../cxf/blueprint/RsClientDefinitionParser.java    |  93 +++++++++++
 .../cxf/blueprint/RsServerBlueprintBean.java       | 101 ++++++++++++
 .../cxf/blueprint/RsServerDefinitionParser.java    |  95 +++++++++++
 .../jaxrs/blueprint/CxfRsBlueprintEndpoint.java    |  95 +++++++++++
 .../CxfRsBlueprintEndpointFactoryBean.java         |  30 ++++
 .../resources/OSGI-INF/blueprint/camel-cxf.xml     |  31 ++++
 .../main/resources/schema/blueprint/camel-cxf.xsd  | 179 +++++++++++++++++++++
 components/pom.xml                                 |   1 +
 .../karaf/features/src/main/resources/features.xml |   1 +
 18 files changed, 1192 insertions(+)

diff --git a/components/camel-cxf-blueprint/pom.xml b/components/camel-cxf-blueprint/pom.xml
new file mode 100644
index 0000000..6231554
--- /dev/null
+++ b/components/camel-cxf-blueprint/pom.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel.karaf</groupId>
+        <artifactId>components</artifactId>
+        <version>3.2.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-cxf-blueprint</artifactId>
+    <packaging>jar</packaging>
+    <name>Camel Karaf :: CXF Blueprint</name>
+    <description>Camel CXF for OSGi Blueprint</description>
+
+    <properties>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-cxf</artifactId>
+        </dependency>
+
+        <!-- OSGi, Blueprint -->
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-blueprint</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.aries.blueprint</groupId>
+            <artifactId>org.apache.aries.blueprint.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-artifacts</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <artifacts>
+                                <artifact>
+                                    <file>./src/main/resources/schema/blueprint/camel-cxf.xsd</file>
+                                    <classifier>blueprint</classifier>
+                                    <type>xsd</type>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/components/camel-cxf-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-cxf-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000..c1b4fc4
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=cxf-blueprint
+groupId=org.apache.camel.karaf
+artifactId=camel-cxf-blueprint
+version=3.2.0-SNAPSHOT
+projectName=Camel Karaf :: CXF Blueprint
+projectDescription=Camel CXF for OSGi Blueprint
diff --git a/components/camel-cxf-blueprint/src/generated/resources/cxf-blueprint.json b/components/camel-cxf-blueprint/src/generated/resources/cxf-blueprint.json
new file mode 100644
index 0000000..1037ab4
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/generated/resources/cxf-blueprint.json
@@ -0,0 +1,12 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "cxf-blueprint",
+    "title": "Cxf Blueprint",
+    "description": "Camel CXF for OSGi Blueprint",
+    "deprecated": false,
+    "groupId": "org.apache.camel.karaf",
+    "artifactId": "camel-cxf-blueprint",
+    "version": "3.2.0-SNAPSHOT"
+  }
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java
new file mode 100644
index 0000000..84c857b
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java
@@ -0,0 +1,62 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import java.util.StringTokenizer;
+
+import org.w3c.dom.Element;
+
+import org.apache.aries.blueprint.ParserContext;
+import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.configuration.blueprint.AbstractBPBeanDefinitionParser;
+import org.osgi.service.blueprint.reflect.BeanMetadata;
+
+public class AbstractBeanDefinitionParser extends AbstractBPBeanDefinitionParser {
+    public static String getIdOrName(Element elem) {
+        String id = elem.getAttribute("id");
+
+        if (null == id || "".equals(id)) {
+            String names = elem.getAttribute("name");
+            if (null != names) {
+                StringTokenizer st = new StringTokenizer(names, ",");
+                if (st.countTokens() > 0) {
+                    id = st.nextToken();
+                }
+            }
+        }
+        return id;
+    }
+    
+    public MutableBeanMetadata createBeanMetadata(Element element, ParserContext context, Class<?> runtimeClass) {
+        MutableBeanMetadata answer = context.createMetadata(MutableBeanMetadata.class);
+        answer.setRuntimeClass(runtimeClass);
+        answer.addProperty("blueprintContainer", createRef(context, "blueprintContainer"));
+        answer.addProperty("bundleContext", createRef(context, "blueprintBundleContext"));
+        // set the Bean scope to be prototype, so we can get a new instance per looking up
+        answer.setScope(BeanMetadata.SCOPE_PROTOTYPE);
+        
+        if (!StringUtils.isEmpty(getIdOrName(element))) {
+            answer.setId(getIdOrName(element));
+        } else {
+            // TODO we may need to throw exception for it
+            answer.setId("camel.cxf.endpoint." + runtimeClass.getSimpleName() + "." + context.generateId());
+        }
+        return answer;
+    }
+
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/BlueprintSupport.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/BlueprintSupport.java
new file mode 100644
index 0000000..c6118d6
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/BlueprintSupport.java
@@ -0,0 +1,32 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+
+public interface BlueprintSupport {
+    
+    void setBlueprintContainer(BlueprintContainer blueprintContainer);
+    
+    BlueprintContainer getBlueprintContainer();
+    
+    BundleContext getBundleContext();
+    
+    void setBundleContext(BundleContext bundleContext);
+
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfBlueprintEndpoint.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfBlueprintEndpoint.java
new file mode 100644
index 0000000..205b879
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfBlueprintEndpoint.java
@@ -0,0 +1,80 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import org.apache.camel.blueprint.BlueprintCamelContext;
+import org.apache.camel.component.cxf.CxfComponent;
+import org.apache.camel.component.cxf.CxfEndpoint;
+import org.apache.cxf.BusFactory;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+
+public class CxfBlueprintEndpoint extends CxfEndpoint {
+
+    private BlueprintContainer blueprintContainer;
+    private BundleContext bundleContext;
+    private BlueprintCamelContext blueprintCamelContext;
+
+    public CxfBlueprintEndpoint(String address, BundleContext context) {
+        super(address, (CxfComponent)null);
+        bundleContext = context;
+    }
+
+    public void destroy() {
+        // Clean up the BusFactory's defaultBus
+        // This method is not called magically, blueprint
+        // needs you to set the destroy-method.
+        BusFactory.setDefaultBus(null);
+        BusFactory.setThreadDefaultBus(null);
+    }
+    
+    @Override
+    public void setServiceClass(String n) throws ClassNotFoundException {
+        setServiceClass(bundleContext.getBundle().loadClass(n));
+    }
+    
+    // Package private methods
+    // -------------------------------------------------------------------------
+
+    public BlueprintContainer getBlueprintContainer() {
+        return blueprintContainer;
+    }
+
+    public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
+        this.blueprintContainer = blueprintContainer;
+    }
+
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+
+    public BlueprintCamelContext getBlueprintCamelContext() {
+        return blueprintCamelContext;
+    }
+
+    public void setBlueprintCamelContext(BlueprintCamelContext blueprintCamelContext) {
+        this.blueprintCamelContext = blueprintCamelContext;
+    }
+
+    public CxfBlueprintEndpoint getBean() {
+        return this;
+    }
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfNamespaceHandler.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfNamespaceHandler.java
new file mode 100644
index 0000000..daf240a
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/CxfNamespaceHandler.java
@@ -0,0 +1,75 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import org.apache.aries.blueprint.ParserContext;
+import org.apache.cxf.helpers.BaseNamespaceHandler;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+import org.osgi.service.blueprint.reflect.Metadata;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CxfNamespaceHandler extends BaseNamespaceHandler {
+    private static final Logger LOG = LoggerFactory.getLogger(CxfNamespaceHandler.class);
+
+    @Override
+    public URL getSchemaLocation(String s) {
+        if ("http://camel.apache.org/schema/blueprint/cxf".equals(s)) {
+            return getClass().getClassLoader().getResource("schema/blueprint/camel-cxf.xsd");
+        }
+        return super.findCoreSchemaLocation(s);
+    }
+
+    @Override
+    @SuppressWarnings({"rawtypes"})
+    public Set<Class> getManagedClasses() {
+        return new HashSet<>(Arrays.asList(CxfNamespaceHandler.class));
+    }
+
+    @Override
+    public Metadata parse(Element element, ParserContext context) {
+        Metadata answer = null;
+        String s = element.getLocalName();
+        if ("cxfEndpoint".equals(s)) {
+            LOG.debug("parsing the cxfEndpoint element");
+            answer = new EndpointDefinitionParser().parse(element, context);
+        }
+        if ("rsClient".equals(s)) {
+            LOG.debug("parsing the rsClient element");
+            answer = new RsClientDefinitionParser().parse(element, context);
+        }
+        if ("rsServer".equals(s)) {
+            LOG.debug("parsing the rsServer element");
+            answer = new RsServerDefinitionParser().parse(element, context);
+        }
+        
+        return answer;
+    }
+
+    @Override
+    public ComponentMetadata decorate(Node node, ComponentMetadata componentMetadata, ParserContext parserContext) {
+        return null;
+    }
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java
new file mode 100644
index 0000000..d288f0b
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java
@@ -0,0 +1,107 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import javax.xml.namespace.QName;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+
+import org.apache.aries.blueprint.ParserContext;
+import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.helpers.DOMUtils;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.reflect.Metadata;
+
+public class EndpointDefinitionParser extends AbstractBeanDefinitionParser {
+    
+    public Metadata parse(Element element, ParserContext context) {
+        MutableBeanMetadata endpointConfig = createBeanMetadata(element, context, CxfBlueprintEndpoint.class);
+ 
+        NamedNodeMap atts = element.getAttributes();
+
+        String bus = null;
+        String address = null;
+
+        for (int i = 0; i < atts.getLength(); i++) {
+            Attr node = (Attr) atts.item(i);
+            String val = node.getValue();
+            String pre = node.getPrefix();
+            String name = node.getLocalName();
+            if ("bus".equals(name)) {
+                bus = val;
+            } else if ("address".equals(name)) {
+                address = val;
+            } else if (isAttribute(pre, name)) {
+                if ("endpointName".equals(name) || "serviceName".equals(name)) {
+                    if (isPlaceHolder(val)) {
+                        endpointConfig.addProperty(name + "String", createValue(context, val));
+                    } else {
+                        QName q = parseQName(element, val);
+                        endpointConfig.addProperty(name, createValue(context, q));
+                    }
+                } else if ("depends-on".equals(name)) {
+                    endpointConfig.addDependsOn(val);
+                } else if (!"name".equals(name)) {
+                    endpointConfig.addProperty(name, createValue(context, val));
+                }
+            }
+        }
+
+        Element elem = DOMUtils.getFirstElement(element);
+        while (elem != null) {
+            String name = elem.getLocalName();
+            if ("properties".equals(name)) {
+                Metadata map = parseMapData(context, endpointConfig, elem);
+                endpointConfig.addProperty(name, map);
+            } else if ("binding".equals(name)) {
+                setFirstChildAsProperty(elem, context, endpointConfig, "bindingConfig");
+            } else if ("inInterceptors".equals(name) || "inFaultInterceptors".equals(name) || "outInterceptors".equals(name)
+                || "outFaultInterceptors".equals(name) || "features".equals(name) || "schemaLocations".equals(name) || "handlers".equals(name)) {
+                Metadata list = parseListData(context, endpointConfig, elem);
+                endpointConfig.addProperty(name, list);
+            } else {
+                setFirstChildAsProperty(elem, context, endpointConfig, name);
+            }
+
+            elem = DOMUtils.getNextElement(elem);
+        }
+        if (StringUtils.isEmpty(bus)) {
+            bus = "cxf";
+        }
+        //Will create a bus if needed...
+
+        endpointConfig.addProperty("bus", getBusRef(context, bus));
+        endpointConfig.setDestroyMethod("destroy");
+        endpointConfig.addArgument(createValue(context, address), String.class.getName(), 0);
+        endpointConfig.addArgument(createRef(context, "blueprintBundleContext"),
+                                   BundleContext.class.getName(), 1);
+
+        return endpointConfig;
+    }
+
+    private static boolean isPlaceHolder(String value) {
+        if (value != null && (value.startsWith("${") && value.endsWith("}")
+            || value.startsWith("{{") && value.endsWith("}}"))) {
+            return true;
+        }
+        return false;
+    }
+    
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientBlueprintBean.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientBlueprintBean.java
new file mode 100644
index 0000000..5b00526
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientBlueprintBean.java
@@ -0,0 +1,95 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import java.util.HashMap;
+
+import org.apache.camel.component.cxf.NullFaultListener;
+import org.apache.cxf.ext.logging.LoggingFeature;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
+import org.apache.cxf.logging.FaultListener;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+
+public class RsClientBlueprintBean extends JAXRSClientFactoryBean implements BlueprintSupport, Cloneable {
+    private BlueprintContainer blueprintContainer;
+    private BundleContext bundleContext;
+    private int loggingSizeLimit;
+    private LoggingFeature loggingFeature;
+    
+    @Override
+    public BlueprintContainer getBlueprintContainer() {
+        return blueprintContainer;
+    }
+
+    @Override
+    public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
+        this.blueprintContainer = blueprintContainer;
+    }
+
+    @Override
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
+
+    @Override
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+    
+    public boolean isLoggingFeatureEnabled() {
+        return loggingFeature != null;
+    }
+
+    public void setLoggingFeatureEnabled(boolean loggingFeatureEnabled) {
+        if (loggingFeature != null) {
+            getFeatures().remove(loggingFeature);
+            loggingFeature = null;
+        }
+        if (loggingFeatureEnabled) {
+            loggingFeature = new LoggingFeature();
+            if (getLoggingSizeLimit() > 0) {
+                loggingFeature.setLimit(getLoggingSizeLimit());
+            }
+            getFeatures().add(loggingFeature);
+        }
+        
+    }
+
+    public int getLoggingSizeLimit() {
+        return loggingSizeLimit;
+    }
+
+    public void setLoggingSizeLimit(int loggingSizeLimit) {
+        this.loggingSizeLimit = loggingSizeLimit;
+        if (loggingFeature != null) {
+            if (loggingSizeLimit > 0) {
+                loggingFeature.setLimit(loggingSizeLimit);
+            }
+        }
+    }
+    
+    public void setSkipFaultLogging(boolean skipFaultLogging) {
+        if (skipFaultLogging) {
+            if (this.getProperties() == null) {
+                this.setProperties(new HashMap<String, Object>());
+            }
+            this.getProperties().put(FaultListener.class.getName(), new NullFaultListener());
+        }
+    }
+
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
new file mode 100644
index 0000000..52351bc
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
@@ -0,0 +1,93 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import java.util.List;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+
+import org.apache.aries.blueprint.ParserContext;
+import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
+import org.apache.aries.blueprint.mutable.MutablePassThroughMetadata;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.configuration.blueprint.AbstractBPBeanDefinitionParser;
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.jaxrs.model.UserResource;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.osgi.service.blueprint.reflect.Metadata;
+
+public class RsClientDefinitionParser extends AbstractBeanDefinitionParser {
+
+    public Metadata parse(Element element, ParserContext context) {
+        MutableBeanMetadata beanMetadata = createBeanMetadata(element, context, RsClientBlueprintBean.class);
+        NamedNodeMap atts = element.getAttributes();
+
+        String bus = null;
+        for (int i = 0; i < atts.getLength(); i++) {
+            Attr node = (Attr) atts.item(i);
+            String val = node.getValue();
+            String pre = node.getPrefix();
+            String name = node.getLocalName();
+            if ("bus".equals(name)) {
+                bus = val;
+            } else if (isAttribute(pre, name)) {
+                if ("depends-on".equals(name)) {
+                    beanMetadata.addDependsOn(val);
+                } else if (!"name".equals(name)) {
+                    beanMetadata.addProperty(name, AbstractBPBeanDefinitionParser.createValue(context, val));
+                }
+            }
+        }
+
+        for (Element elem = DOMUtils.getFirstElement(element); elem != null; elem = DOMUtils.getNextElement(elem)) {
+            String name = elem.getLocalName();
+            if ("properties".equals(name) || "headers".equals(name)) {
+                Metadata map = parseMapData(context, beanMetadata, elem);
+                beanMetadata.addProperty(name, map);
+            } else if ("binding".equals(name)) {
+                setFirstChildAsProperty(elem, context, beanMetadata, "bindingConfig");
+            } else if ("inInterceptors".equals(name) || "inFaultInterceptors".equals(name) || "outInterceptors".equals(name)
+                || "outFaultInterceptors".equals(name) || "features".equals(name) || "schemaLocations".equals(name) || "handlers".equals(name)) {
+                Metadata list = parseListData(context, beanMetadata, elem);
+                beanMetadata.addProperty(name, list);
+            } else if ("features".equals(name) || "providers".equals(name)
+                || "schemaLocations".equals(name) || "modelBeans".equals(name)) {
+                Metadata list = parseListData(context, beanMetadata, elem);
+                beanMetadata.addProperty(name, list);
+            } else if ("model".equals(name)) {
+                List<UserResource> resources = ResourceUtils.getResourcesFromElement(elem);
+                MutablePassThroughMetadata value = context.createMetadata(MutablePassThroughMetadata.class);
+                value.setObject(resources);
+                beanMetadata.addProperty(name, value);
+            } else {
+                setFirstChildAsProperty(elem, context, beanMetadata, name);
+            }
+        } 
+ 
+        if (StringUtils.isEmpty(bus)) {
+            bus = "cxf";
+        }
+        //Will create a bus if needed...
+
+        beanMetadata.addProperty("bus", getBusRef(context, bus));
+        return beanMetadata;
+    }
+
+    
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerBlueprintBean.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerBlueprintBean.java
new file mode 100644
index 0000000..64fb07a
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerBlueprintBean.java
@@ -0,0 +1,101 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import java.util.HashMap;
+
+import org.apache.camel.component.cxf.NullFaultListener;
+import org.apache.cxf.feature.LoggingFeature;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.logging.FaultListener;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+
+public class RsServerBlueprintBean extends JAXRSServerFactoryBean implements BlueprintSupport, Cloneable {
+    
+    private BlueprintContainer blueprintContainer;
+    private BundleContext bundleContext;
+    private LoggingFeature loggingFeature;
+    private int loggingSizeLimit;
+    
+    @Override
+    public BlueprintContainer getBlueprintContainer() {
+        return blueprintContainer;
+    }
+
+    @Override
+    public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
+        this.blueprintContainer = blueprintContainer;
+    }
+
+    @Override
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
+
+    @Override
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+    
+    public boolean isLoggingFeatureEnabled() {
+        return loggingFeature != null;
+    }
+
+    public void setLoggingFeatureEnabled(boolean loggingFeatureEnabled) {
+        if (loggingFeature != null) {
+            getFeatures().remove(loggingFeature);
+            loggingFeature = null;
+        }
+        if (loggingFeatureEnabled) {
+            if (getLoggingSizeLimit() > 0) {
+                loggingFeature = new LoggingFeature(getLoggingSizeLimit());
+            } else {
+                loggingFeature = new LoggingFeature();
+            }
+            getFeatures().add(loggingFeature);
+        }
+        
+    }
+    
+    public int getLoggingSizeLimit() {
+        return loggingSizeLimit;
+    }
+
+    public void setLoggingSizeLimit(int loggingSizeLimit) {
+        this.loggingSizeLimit = loggingSizeLimit;
+        if (loggingFeature != null) {
+            getFeatures().remove(loggingFeature);
+            if (loggingSizeLimit > 0) {
+                loggingFeature = new LoggingFeature(loggingSizeLimit);
+            } else {
+                loggingFeature = new LoggingFeature();
+            }
+            getFeatures().add(loggingFeature);
+        }
+    }
+    
+    public void setSkipFaultLogging(boolean skipFaultLogging) {
+        if (skipFaultLogging) {
+            if (this.getProperties() == null) {
+                this.setProperties(new HashMap<String, Object>());
+            }
+            this.getProperties().put(FaultListener.class.getName(), new NullFaultListener());
+        }
+    }
+    
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java
new file mode 100644
index 0000000..acbc086
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/blueprint/RsServerDefinitionParser.java
@@ -0,0 +1,95 @@
+/*
+ * 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.component.cxf.blueprint;
+
+import java.util.List;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+
+import org.apache.aries.blueprint.ParserContext;
+import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
+import org.apache.aries.blueprint.mutable.MutablePassThroughMetadata;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.configuration.blueprint.AbstractBPBeanDefinitionParser;
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.jaxrs.model.UserResource;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.osgi.service.blueprint.reflect.Metadata;
+
+public class RsServerDefinitionParser extends AbstractBeanDefinitionParser {
+    
+    public Metadata parse(Element element, ParserContext context) {
+        MutableBeanMetadata beanMetadata = createBeanMetadata(element, context, RsServerBlueprintBean.class);
+        NamedNodeMap atts = element.getAttributes();
+
+        String bus = null;
+        for (int i = 0; i < atts.getLength(); i++) {
+            Attr node = (Attr) atts.item(i);
+            String val = node.getValue();
+            String pre = node.getPrefix();
+            String name = node.getLocalName();
+            if ("bus".equals(name)) {
+                bus = val;
+            } else if (isAttribute(pre, name)) {
+                if ("depends-on".equals(name)) {
+                    beanMetadata.addDependsOn(val);
+                } else if (!"name".equals(name)) {
+                    beanMetadata.addProperty(name, AbstractBPBeanDefinitionParser.createValue(context, val));
+                }
+            }
+        }
+
+        for (Element elem = DOMUtils.getFirstElement(element); elem != null; elem = DOMUtils.getNextElement(elem)) {
+            String name = elem.getLocalName();
+            if ("properties".equals(name)
+                || "extensionMappings".equals(name)
+                || "languageMappings".equals(name)) {
+                Metadata map = parseMapData(context, beanMetadata, elem);
+                beanMetadata.addProperty(name, map);
+            } else if ("binding".equals(name)) {
+                setFirstChildAsProperty(elem, context, beanMetadata, "bindingConfig");
+            } else if ("inInterceptors".equals(name) || "inFaultInterceptors".equals(name) || "outInterceptors".equals(name)
+                || "outFaultInterceptors".equals(name) || "features".equals(name) || "schemaLocations".equals(name) || "handlers".equals(name)) {
+                Metadata list = parseListData(context, beanMetadata, elem);
+                beanMetadata.addProperty(name, list);
+            } else if ("features".equals(name) || "providers".equals(name)
+                || "schemaLocations".equals(name) || "modelBeans".equals(name)
+                || "serviceBeans".equals(name)) {
+                Metadata list = parseListData(context, beanMetadata, elem);
+                beanMetadata.addProperty(name, list);
+            } else if ("model".equals(name)) {
+                List<UserResource> resources = ResourceUtils.getResourcesFromElement(elem);
+                MutablePassThroughMetadata value = context.createMetadata(MutablePassThroughMetadata.class);
+                value.setObject(resources);
+                beanMetadata.addProperty(name, value);
+            } else {
+                setFirstChildAsProperty(elem, context, beanMetadata, name);
+            }
+        } 
+ 
+        if (StringUtils.isEmpty(bus)) {
+            bus = "cxf";
+        }
+        //Will create a bus if needed...
+
+        beanMetadata.addProperty("bus", getBusRef(context, bus));
+        return beanMetadata;
+    }
+
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpoint.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpoint.java
new file mode 100644
index 0000000..3ad2478
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpoint.java
@@ -0,0 +1,95 @@
+/*
+ * 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.component.cxf.jaxrs.blueprint;
+
+import org.apache.camel.Component;
+import org.apache.camel.blueprint.BlueprintCamelContext;
+import org.apache.camel.component.cxf.blueprint.BlueprintSupport;
+import org.apache.camel.component.cxf.blueprint.RsClientBlueprintBean;
+import org.apache.camel.component.cxf.blueprint.RsServerBlueprintBean;
+import org.apache.camel.component.cxf.jaxrs.CxfRsEndpoint;
+import org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.springframework.util.ReflectionUtils;
+
+public class CxfRsBlueprintEndpoint extends CxfRsEndpoint {
+    private AbstractJAXRSFactoryBean bean;
+    private BlueprintContainer blueprintContainer;
+    private BundleContext bundleContext;
+    private BlueprintCamelContext blueprintCamelContext;
+
+    public CxfRsBlueprintEndpoint(Component comp, String uri, AbstractJAXRSFactoryBean bean) {
+        super(uri, comp);
+        this.bean = bean;
+        setAddress(bean.getAddress());
+        // update the sfb address by resolving the properties
+        bean.setAddress(getAddress());
+        BlueprintSupport support = (BlueprintSupport)bean;
+        setBlueprintContainer(support.getBlueprintContainer());
+        setBundleContext(support.getBundleContext());
+    }
+    
+    public BlueprintContainer getBlueprintContainer() {
+        return blueprintContainer;
+    }
+
+    public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
+        this.blueprintContainer = blueprintContainer;
+    }
+
+    public BundleContext getBundleContext() {
+        return bundleContext;
+    }
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+
+    public BlueprintCamelContext getBlueprintCamelContext() {
+        return blueprintCamelContext;
+    }
+
+    public void setBlueprintCamelContext(BlueprintCamelContext blueprintCamelContext) {
+        this.blueprintCamelContext = blueprintCamelContext;
+    }
+    
+    @Override
+    protected JAXRSServerFactoryBean newJAXRSServerFactoryBean() {
+        checkBeanType(bean, JAXRSServerFactoryBean.class);
+        return (RsServerBlueprintBean)bean;
+    }
+    
+    @Override
+    protected JAXRSClientFactoryBean newJAXRSClientFactoryBean() {
+        checkBeanType(bean, JAXRSClientFactoryBean.class);
+        return newInstanceWithCommonProperties();
+    }
+
+    private RsClientBlueprintBean newInstanceWithCommonProperties() {
+        RsClientBlueprintBean cfb = new RsClientBlueprintBean();
+
+        if (bean instanceof RsClientBlueprintBean) {
+            ReflectionUtils.shallowCopyFieldState(bean, cfb);
+        }
+
+        return cfb;
+    }
+
+}
diff --git a/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpointFactoryBean.java b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpointFactoryBean.java
new file mode 100644
index 0000000..d29cdd8
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/java/org/apache/camel/component/cxf/jaxrs/blueprint/CxfRsBlueprintEndpointFactoryBean.java
@@ -0,0 +1,30 @@
+/*
+ * 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.component.cxf.jaxrs.blueprint;
+
+import org.apache.camel.Component;
+import org.apache.camel.component.cxf.jaxrs.CxfRsEndpoint;
+import org.apache.camel.component.cxf.jaxrs.CxfRsEndpointFactoryBean;
+import org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean;
+
+public class CxfRsBlueprintEndpointFactoryBean implements CxfRsEndpointFactoryBean {
+
+    @Override
+    public CxfRsEndpoint createEndpoint(Component component, String uri, AbstractJAXRSFactoryBean bean) throws Exception {
+        return new CxfRsBlueprintEndpoint(component, uri, bean);
+    }
+}
diff --git a/components/camel-cxf-blueprint/src/main/resources/OSGI-INF/blueprint/camel-cxf.xml b/components/camel-cxf-blueprint/src/main/resources/OSGI-INF/blueprint/camel-cxf.xml
new file mode 100644
index 0000000..ab14595
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/resources/OSGI-INF/blueprint/camel-cxf.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
+           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
+
+  <service interface="org.apache.aries.blueprint.NamespaceHandler">
+    <service-properties>
+      <entry key="osgi.service.blueprint.namespace" value="http://camel.apache.org/schema/blueprint/cxf"/>
+    </service-properties>
+    <bean class="org.apache.camel.component.cxf.blueprint.CxfNamespaceHandler"/>
+  </service>
+</blueprint>
diff --git a/components/camel-cxf-blueprint/src/main/resources/schema/blueprint/camel-cxf.xsd b/components/camel-cxf-blueprint/src/main/resources/schema/blueprint/camel-cxf.xsd
new file mode 100644
index 0000000..fe9d99b
--- /dev/null
+++ b/components/camel-cxf-blueprint/src/main/resources/schema/blueprint/camel-cxf.xsd
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<xsd:schema xmlns="http://camel.apache.org/schema/blueprint/cxf"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:beans="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+            xmlns:cxf-beans="http://cxf.apache.org/configuration/beans"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            targetNamespace="http://camel.apache.org/schema/blueprint/cxf"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
+
+  <xsd:import namespace="http://www.osgi.org/xmlns/blueprint/v1.0.0" schemaLocation="https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"/>
+  <xsd:import namespace="http://cxf.apache.org/configuration/beans" schemaLocation="http://cxf.apache.org/schemas/configuration/cxf-beans.xsd"/>
+
+  <xsd:element name="cxfEndpoint">
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="beans:Tcomponent">
+          <xsd:all>
+            <xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="outInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="handlers" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="properties" type="beans:Tmap" minOccurs="0"/>
+            <xsd:element name="schemaLocations" type="schemasType" minOccurs="0"/>
+            <xsd:element name="serviceBean" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="serviceFactory" type="xsd:anyType" minOccurs="0"/>
+          </xsd:all>
+          <!-- xsd:attributeGroup ref="cxf-beans:beanAttributes"/-->
+          <xsd:attribute name="address" type="xsd:string"/>
+          <xsd:attribute name="bindingId" type="xsd:string"/>
+          <xsd:attribute name="bus" type="xsd:string"/>
+          <xsd:attribute name="serviceClass" type="xsd:string"/>
+          <xsd:attribute name="transportId" type="xsd:string"/>
+          <xsd:attribute name="wsdlURL" type="xsd:string"/>
+          <xsd:attribute name="endpointName" type="xsd:QName"/>
+          <xsd:attribute name="serviceName" type="xsd:QName"/>
+          <xsd:attribute name="loggingFeatureEnabled" type="xsd:boolean"/>
+          <xsd:attribute name="loggingSizeLimit" type="xsd:integer" />
+          <xsd:attribute name="continuationTimeout" type="xsd:long" />
+          <xsd:attribute name="publishedEndpointUrl" type="xsd:string" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="rsServer">
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="beans:Tcomponent">
+          <xsd:all>
+            <xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="invoker" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="outInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="properties" type="beans:Tmap" minOccurs="0"/>
+            <xsd:element name="serviceBeans" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="modelBeans" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="model" type="model" minOccurs="0"/>
+            <xsd:element name="providers" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="extensionMappings" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="languageMappings" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="schemaLocations" type="schemasType" minOccurs="0"/>
+          </xsd:all>
+          <!-- xsd:attributeGroup ref="cxf-beans:beanAttributes"/-->
+          <xsd:attribute name="address" type="xsd:string"/>
+          <xsd:attribute name="bus" type="xsd:string"/>
+          <xsd:attribute name="serviceClass" type="xsd:string"/>
+          <xsd:attribute name="transportId" type="xsd:string"/>
+          <xsd:attribute name="modelRef" type="xsd:string"/>
+          <xsd:attribute name="bindingId" type="xsd:string"/>
+          <xsd:attribute name="staticSubresourceResolution" type="xsd:boolean"/>
+          <xsd:attribute name="loggingFeatureEnabled" type="xsd:boolean"/>
+          <xsd:attribute name="loggingSizeLimit" type="xsd:integer" />
+          <xsd:attribute name="publishedEndpointUrl" type="xsd:string" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:element name="rsClient">
+    <xsd:complexType>
+      <xsd:complexContent>
+        <xsd:extension base="beans:Tcomponent">
+          <xsd:all>
+            <xsd:element name="executor" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="features" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="binding" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="inFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="outInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="properties" type="beans:Tmap" minOccurs="0"/>
+            <xsd:element name="providers" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="modelBeans" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="model" type="model" minOccurs="0"/>
+            <xsd:element name="headers" type="xsd:anyType" minOccurs="0"/>
+            <xsd:element name="schemaLocations" type="schemasType" minOccurs="0"/>
+          </xsd:all>
+          <!-- xsd:attributeGroup ref="cxf-beans:beanAttributes"/-->
+          <xsd:attribute name="address" type="xsd:string"/>
+          <xsd:attribute name="serviceClass" type="xsd:string"/>
+          <xsd:attribute name="inheritHeaders" type="xsd:boolean"/>
+          <xsd:attribute name="bus" type="xsd:string"/>
+          <xsd:attribute name="transportId" type="xsd:string"/>
+          <xsd:attribute name="bindingId" type="xsd:string"/>
+          <xsd:attribute name="modelRef" type="xsd:string"/>
+          <xsd:attribute name="username" type="xsd:string"/>
+          <xsd:attribute name="password" type="xsd:string"/>
+          <xsd:attribute name="loggingFeatureEnabled" type="xsd:boolean"/>
+          <xsd:attribute name="loggingSizeLimit" type="xsd:integer" />
+        </xsd:extension>
+      </xsd:complexContent>
+    </xsd:complexType>
+  </xsd:element>
+
+  <xsd:complexType name="schemasType">
+    <xsd:sequence>
+      <xsd:element name="schemaLocation" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="model">
+    <xsd:sequence>
+      <xsd:element name="resource" minOccurs="0" maxOccurs="unbounded">
+        <xsd:complexType>
+          <xsd:sequence>
+            <xsd:element name="operation" minOccurs="0" maxOccurs="unbounded">
+              <xsd:complexType>
+                <xsd:sequence>
+                  <xsd:element name="param" minOccurs="0" maxOccurs="unbounded">
+                    <xsd:complexType>
+                      <xsd:attribute name="name" type="xsd:string"/>
+                      <xsd:attribute name="type" type="xsd:string"/>
+                    </xsd:complexType>
+                  </xsd:element>
+                </xsd:sequence>
+                <xsd:attribute name="name" type="xsd:string"/>
+                <xsd:attribute name="path" type="xsd:string"/>
+                <xsd:attribute name="verb" type="xsd:string"/>
+                <xsd:attribute name="consumes" type="xsd:string"/>
+                <xsd:attribute name="produces" type="xsd:string"/>
+              </xsd:complexType>
+            </xsd:element>
+          </xsd:sequence>
+          <xsd:attribute name="name" type="xsd:string"/>
+          <xsd:attribute name="path" type="xsd:string"/>
+        </xsd:complexType>
+      </xsd:element>
+    </xsd:sequence>
+    <xsd:attribute name="id" type="xsd:string"/>
+  </xsd:complexType>
+</xsd:schema>
diff --git a/components/pom.xml b/components/pom.xml
index db54e3e..fd4477e 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -33,6 +33,7 @@
 
     <modules>
         <module>camel-blueprint</module>
+        <module>camel-cxf-blueprint</module>
         <module>camel-kura</module>
         <module>camel-paxlogging</module>
         <module>camel-test-blueprint</module>
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 227f0f3..dbaa535 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -798,6 +798,7 @@
     <feature version='${cxf-version-range}'>cxf-features-logging</feature>
     <bundle>mvn:org.apache.camel/camel-attachments/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-http-base/${project.version}</bundle>
+    <bundle>mvn:org.apache.camel.karaf/camel-cxf-blueprint/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-cxf-transport/${project.version}</bundle>
     <bundle>mvn:org.apache.camel/camel-cxf/${project.version}</bundle>
   </feature>