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

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

commit 8bde80ed2355cbcec436610ea3aebfba7a8f11bb
Author: jpoth <poth.j...@gmail.com>
AuthorDate: Wed Jul 18 11:58:18 2018 +0200

    Add camel-fhir OSGi example
---
 examples/camel-example-fhir-osgi/README.md         | 142 +++++++++++++
 ...pache.camel.example.fhir.osgi.configuration.cfg |  19 ++
 examples/camel-example-fhir-osgi/pom.xml           | 233 +++++++++++++++++++++
 .../src/main/data/hl7v2.patient                    |   1 +
 .../apache/camel/example/fhir/osgi/FhirRoute.java  |  64 ++++++
 .../resources/OSGI-INF/blueprint/camel-context.xml |  35 ++++
 .../src/main/resources/log4j2.properties           |  23 ++
 .../apache/camel/example/fhir/osgi/FhirOsgiIT.java |  77 +++++++
 .../camel/example/fhir/osgi/PaxExamOptions.java    |  72 +++++++
 examples/pom.xml                                   |   1 +
 10 files changed, 667 insertions(+)

diff --git a/examples/camel-example-fhir-osgi/README.md 
b/examples/camel-example-fhir-osgi/README.md
new file mode 100644
index 0000000..c96296c
--- /dev/null
+++ b/examples/camel-example-fhir-osgi/README.md
@@ -0,0 +1,142 @@
+# FHIR Example - OSGi
+
+### Introduction
+
+This is an example application of the `camel-fhir` component that can be 
executed inside an OSGi container. We will be 
+using Apache Karaf.
+
+### Build
+
+You will need to build this example first:
+
+```sh
+$ mvn install
+```
+
+### Run OSGi / Karaf
+
+This example can be executed within Karaf 4.x
+
+To run the example, from the command line:
+
+1. In the Karaf install root directory, start Karaf:
+
+    ```sh
+    $ bin/karaf
+    ```
+
+2. Install the pre-requisites:
+
+    ```sh
+    karaf@root()> repo-add camel ${version}
+    karaf@root()> feature:install camel-blueprint camel-hl7 camel-fhir
+    ```
+    
+3. Copy the configuration file 
org.apache.camel.example.fhir.osgi.configuration.cfg to the etc/ directory of 
your Karaf installation:
+    ```
+    InstallDir/etc/org.apache.camel.example.fhir.osgi.configuration.cfg       
+    ```
+4. Then install and start the example:
+
+    ```sh
+    karaf@root()> install -s 
mvn:org.apache.camel.example/camel-example-fhir-osgi/${version}
+    ```
+
+When the Camel application runs, you should see a folder created under 
`work/fhir/input`. Copy the file `hl7v2.patient`
+located in the `data` folder into it.
+
+By tailing the log with:
+
+    ```sh
+    karaf@root()> log:tail
+    ```
+
+The following messages should be displayed:
+
+    ```
+    2018-07-17 17:02:35,590 | INFO  | nt Dispatcher: 1 | FhirContext           
           | 52 - ca.uhn.hapi.fhir.hapi-fhir-base - 3.3.0 | Creating new FHIR 
context for FHIR version [DSTU3]
+    2018-07-17 17:02:35,631 | INFO  | nt Dispatcher: 1 | BlueprintCamelContext 
           | 59 - org.apache.camel.camel-blueprint - 2.23.0.SNAPSHOT | Route: 
fhir-example-osgi started and consuming from: file://work/fhir/input
+    2018-07-17 17:02:35,631 | INFO  | nt Dispatcher: 1 | BlueprintCamelContext 
           | 59 - org.apache.camel.camel-blueprint - 2.23.0.SNAPSHOT | Total 1 
routes, of which 1 are started
+    2018-07-17 17:02:35,632 | INFO  | nt Dispatcher: 1 | BlueprintCamelContext 
           | 59 - org.apache.camel.camel-blueprint - 2.23.0.SNAPSHOT | Apache 
Camel 2.23.0-SNAPSHOT (CamelContext: camel-fhir) started in 0.853 seconds
+    2018-07-17 17:03:06,157 | INFO  | /work/fhir/input | fhir-example-osgi     
           | 61 - org.apache.camel.camel-core - 2.23.0.SNAPSHOT | Converting 
hl7v2.patient
+    2018-07-17 17:03:06,577 | INFO  | /work/fhir/input | fhir-example-osgi     
           | 61 - org.apache.camel.camel-core - 2.23.0.SNAPSHOT | Inserting 
Patient: 
{"resourceType":"Patient","id":"100005056","name":[{"family":"Freeman","given":["Vincent"]}]}
+    2018-07-17 17:03:08,829 | INFO  | d #2 - CamelFhir | fhir-example-osgi     
           | 61 - org.apache.camel.camel-core - 2.23.0.SNAPSHOT | Patient 
created successfully: true
+    ```
+
+Hit <kbd>ctrl</kbd>+<kbd>c</kbd> to exit the log command.
+
+Camel commands can be used to gain some insights on the Camel context, e.g.:
+
+- The `camel:context-list` displays the Camel context:
+
+    ```
+    karaf@root()> camel:context-list
+     Context        Status              Total #       Failed #     Inflight #  
 Uptime        
+     -------        ------              -------       --------     ----------  
 ------        
+     camel-fhir     Started                   1              0              0  
 3 minute  
+    ```
+
+- The `camel:route-list` command displays the Camel routes:
+
+    ```
+    karaf@root()> camel:route-list
+     Context        Route              Status              Total #       
Failed #     Inflight #   Uptime     
+     -------        -----              ------              -------       
--------     ----------   ------      
+     camel-fhir     fhir-example-osgi  Started                   1             
 0              0   4 minutes
+    ```
+
+- And the `camel:route-info` command displays route information:
+
+    ```
+    karaf@root()> camel:route-info camel-fhir fhir-example-osgi                
                                                                                
                                                        
+    Camel Route fhir-example-osgi
+        Camel Context: camel-fhir
+        State: Started
+        State: Started
+    
+    
+    Statistics
+        Exchanges Total: 1
+        Exchanges Completed: 1
+        Exchanges Failed: 0
+        Exchanges Inflight: 0
+        Min Processing Time: 2674 ms
+        Max Processing Time: 2674 ms
+        Mean Processing Time: 2674 ms
+        Total Processing Time: 2674 ms
+        Last Processing Time: 2674 ms
+        Delta Processing Time: 2674 ms
+        Start Statistics Date: 2018-07-17 17:02:35
+        Reset Statistics Date: 2018-07-17 17:02:35
+        First Exchange Date: 2018-07-17 17:03:08
+        Last Exchange Date: 2018-07-17 17:03:08
+    ```
+
+Finally, you can stop the example with:
+
+    ```sh
+    karaf@root()> uninstall camel-example-fhir-osgi
+    ```
+
+And check in the log that the Camel context has been gracefully
+shutdown:
+    
+    ```
+    2018-07-17 17:09:32,418 | INFO  | xample-fhir-osgi | BlueprintExtender     
           | 12 - org.apache.aries.blueprint.core - 1.8.3 | Destroying 
BlueprintContainer for bundle 
org.apache.camel.example.camel-example-fhir-osgi/2.23.0.SNAPSHOT
+    2018-07-17 17:09:32,420 | INFO  | nt Dispatcher: 1 | BlueprintCamelContext 
           | 59 - org.apache.camel.camel-blueprint - 2.23.0.SNAPSHOT | Stopping 
CamelContext: camel-fhir
+    2018-07-17 17:09:32,421 | INFO  | nt Dispatcher: 1 | BlueprintCamelContext 
           | 59 - org.apache.camel.camel-blueprint - 2.23.0.SNAPSHOT | Apache 
Camel 2.23.0-SNAPSHOT (CamelContext: camel-fhir) is shutting down
+    2018-07-17 17:09:32,423 | INFO  | nt Dispatcher: 1 | 
DefaultShutdownStrategy          | 61 - org.apache.camel.camel-core - 
2.23.0.SNAPSHOT | Starting to graceful shutdown 1 routes (timeout 300 seconds)
+    2018-07-17 17:09:32,427 | INFO  | 3 - ShutdownTask | 
DefaultShutdownStrategy          | 61 - org.apache.camel.camel-core - 
2.23.0.SNAPSHOT | Route: fhir-example-osgi shutdown complete, was consuming 
from: file://work/fhir/input
+    2018-07-17 17:09:32,428 | INFO  | nt Dispatcher: 1 | 
DefaultShutdownStrategy          | 61 - org.apache.camel.camel-core - 
2.23.0.SNAPSHOT | Graceful shutdown of 1 routes completed in 0 seconds
+    2018-07-17 17:09:32,438 | INFO  | nt Dispatcher: 1 | BlueprintCamelContext 
           | 59 - org.apache.camel.camel-blueprint - 2.23.0.SNAPSHOT | Apache 
Camel 2.23.0-SNAPSHOT (CamelContext: camel-fhir) uptime 6 minutes
+    2018-07-17 17:09:32,438 | INFO  | nt Dispatcher: 1 | BlueprintCamelContext 
           | 59 - org.apache.camel.camel-blueprint - 2.23.0.SNAPSHOT | Apache 
Camel 2.23.0-SNAPSHOT (CamelContext: camel-fhir) is shutdown in 0.017 seconds
+    ```
+
+### Forum, Help, etc
+
+If you hit an problems please let us know on the Camel Forums
+<http://camel.apache.org/discussion-forums.html>
+
+Please help us make Apache Camel better - we appreciate any feedback you may 
have. Enjoy!
+
+The Camel riders!
diff --git 
a/examples/camel-example-fhir-osgi/org.apache.camel.example.fhir.osgi.configuration.cfg
 
b/examples/camel-example-fhir-osgi/org.apache.camel.example.fhir.osgi.configuration.cfg
new file mode 100644
index 0000000..7c159c3
--- /dev/null
+++ 
b/examples/camel-example-fhir-osgi/org.apache.camel.example.fhir.osgi.configuration.cfg
@@ -0,0 +1,19 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+serverUrl=http://localhost:8080/hapi-fhir-jpaserver-example/baseDstu3
+fhirVersion=DSTU3
+input=work/fhir/input
\ No newline at end of file
diff --git a/examples/camel-example-fhir-osgi/pom.xml 
b/examples/camel-example-fhir-osgi/pom.xml
new file mode 100644
index 0000000..8c0b3b7
--- /dev/null
+++ b/examples/camel-example-fhir-osgi/pom.xml
@@ -0,0 +1,233 @@
+<?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.example</groupId>
+    <artifactId>examples</artifactId>
+    <version>2.23.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-example-fhir-osgi</artifactId>
+  <name>Camel :: Example :: FHIR :: OSGi</name>
+  <description>An example running Camel FHIR in Apache Karaf</description>
+  <packaging>jar</packaging>
+
+  <properties>
+    <category>OSGi</category>
+  </properties>
+
+  <dependencies>
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-fhir</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-hl7</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-blueprint</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>ca.uhn.hapi</groupId>
+      <artifactId>hapi-structures-v24</artifactId>
+      <version>${hapi-version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+      <version>1</version>
+    </dependency>
+
+
+    <!-- OSGi API -->
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    
+    <!-- logging -->
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+
+    <!-- test -->
+
+    <!-- PAX Exam -->
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-spi</artifactId>
+      <version>${pax-exam-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-junit4</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-container-karaf</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.url</groupId>
+      <artifactId>pax-url-aether</artifactId>
+      <version>2.4.5</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.tinybundles</groupId>
+      <artifactId>tinybundles</artifactId>
+      <version>2.1.1</version>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- Karaf & Command Shell -->
+    <dependency>
+      <groupId>org.apache.karaf</groupId>
+      <artifactId>apache-karaf</artifactId>
+      <version>${karaf4-version}</version>
+      <type>zip</type>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.karaf.features</groupId>
+          <artifactId>framework</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+    <!-- Karaf Features -->
+    <dependency>
+      <groupId>org.apache.camel.karaf</groupId>
+      <artifactId>apache-camel</artifactId>
+      <version>${project.version}</version>
+      <classifier>features</classifier>
+      <type>xml</type>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <!-- Easier to get the local artifact from the integration tests -->
+    <finalName>${project.artifactId}</finalName>
+
+    <plugins>
+
+      <!-- Camel plugin to run the example in Java SE -->
+      <plugin>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-maven-plugin</artifactId>
+        <version>${project.version}</version>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.servicemix.tooling</groupId>
+        <artifactId>depends-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-depends-file</id>
+            <goals>
+              <goal>generate-depends-file</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
+            
<Export-Package>org.apache.camel.example.fhir.osgi*</Export-Package>
+            <Import-Package>*</Import-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>it-fhir</id>
+      <build>
+        <plugins>
+          <!-- Execute in the integration-test phase so that the packaged JAR 
can be used -->
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <executions>
+              <execution>
+                <phase>integration-test</phase>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <configuration>
+                  <includes>
+                    <include>**/*IT.java</include>
+                  </includes>
+                  
<forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>
diff --git a/examples/camel-example-fhir-osgi/src/main/data/hl7v2.patient 
b/examples/camel-example-fhir-osgi/src/main/data/hl7v2.patient
new file mode 100644
index 0000000..b5ecbe7
--- /dev/null
+++ b/examples/camel-example-fhir-osgi/src/main/data/hl7v2.patient
@@ -0,0 +1 @@
+MSH|^~\&|Amalga HIS|BUM|New 
Tester|MS|20111121103141||ORU^R01|2847970-201111211031|P|2.4|||AL|NE|764|ASCII|||
PID||100005056|100005056||Freeman^Vincent^""^^""|""|19810813000000|F||CA|Street 
1^""^""^""^34000^SGP^^""~""^""^""^""^Danling Street 
5th^THA^^""||326-2275^PRN^PH^^66^675~476-5059^ORN^CP^^66^359~(123)456-7890^ORN^FX^^66^222~^NET^X.400^a@a.a~^NET^X.400^du...@hotmail.com|(123)456-7890^WPN^PH^^66|UNK|S|BUD||BP000111899|D99999^""||CA|Bangkok|||THA||THA|""|N
PV1||OPD   
||||""^""^""||||CNSLT|||||C|VIP|||6262618|PB1||||||||||||||||||||||||20101208134638
PV2|||^Unknown|""^""||||""|""|0||""|||||||||||||||||||||||||||||HP1
ORC|NW|""|BMC1102771601|""|CM||^^^^^""|||||||||""^""^^^""
OBR|1|""|BMC1102771601|""^Brain 
(CT)||20111028124215||||||||||||||||||CTSCAN|F||^^^^^ROUTINE|||""||||||""|||||||||||^""
OBX|1|FT|""^Brain (CT)||++++ text of report goes here 
+++|||REQAT|||FINAL|||20111121103040||75929^Gosselin^Angelina
\ No newline at end of file
diff --git 
a/examples/camel-example-fhir-osgi/src/main/java/org/apache/camel/example/fhir/osgi/FhirRoute.java
 
b/examples/camel-example-fhir-osgi/src/main/java/org/apache/camel/example/fhir/osgi/FhirRoute.java
new file mode 100644
index 0000000..eef2a9f
--- /dev/null
+++ 
b/examples/camel-example-fhir-osgi/src/main/java/org/apache/camel/example/fhir/osgi/FhirRoute.java
@@ -0,0 +1,64 @@
+/**
+ * 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.example.fhir.osgi;
+
+import ca.uhn.hl7v2.HL7Exception;
+import ca.uhn.hl7v2.model.v24.message.ORU_R01;
+import ca.uhn.hl7v2.model.v24.segment.PID;
+import org.apache.camel.LoggingLevel;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.http.ProtocolException;
+import org.hl7.fhir.dstu3.model.Patient;
+
+public class FhirRoute extends RouteBuilder {
+
+    @Override
+    public void configure() {
+        from("file:{{input}}").routeId("fhir-example-osgi")
+            .onException(ProtocolException.class)
+                .handled(true)
+                .log(LoggingLevel.ERROR, "Error connecting to FHIR server with 
URL:{{serverUrl}}, please check the 
org.apache.camel.example.fhir.osgi.configuration.cfg configuration file 
${exception.message}")
+                .end()
+            .onException(HL7Exception.class)
+                .handled(true)
+                .log(LoggingLevel.ERROR, "Error unmarshalling ${file:name} 
${exception.message}")
+                .end()
+            .log("Converting ${file:name}")
+            // unmarshall file to hl7 message
+            .unmarshal().hl7()
+            // very simple mapping from a HLV2 patient to dstu3 patient
+            .process(exchange -> {
+                ORU_R01 msg = exchange.getIn().getBody(ORU_R01.class);
+                final PID pid = msg.getPATIENT_RESULT().getPATIENT().getPID();
+                String surname = 
pid.getPatientName()[0].getFamilyName().getFn1_Surname().getValue();
+                String name = 
pid.getPatientName()[0].getGivenName().getValue();
+                String patientId = 
msg.getPATIENT_RESULT().getPATIENT().getPID().getPatientID().getCx1_ID().getValue();
+                Patient patient = new Patient();
+                patient.addName().addGiven(name);
+                patient.getNameFirstRep().setFamily(surname);
+                patient.setId(patientId);
+                exchange.getIn().setBody(patient);
+            })
+            // marshall to JSON for logging
+            .marshal().fhirJson("{{fhirVersion}}")
+            .log("Inserting Patient: ${body}")
+            // create Patient in our FHIR server
+            
.to("fhir://create/resource?inBody=resourceAsString&serverUrl={{serverUrl}}&fhirVersion={{fhirVersion}}")
+            // log the outcome
+            .log("Patient created successfully: ${body.getCreated}");
+    }
+}
diff --git 
a/examples/camel-example-fhir-osgi/src/main/resources/OSGI-INF/blueprint/camel-context.xml
 
b/examples/camel-example-fhir-osgi/src/main/resources/OSGI-INF/blueprint/camel-context.xml
new file mode 100644
index 0000000..650f76a
--- /dev/null
+++ 
b/examples/camel-example-fhir-osgi/src/main/resources/OSGI-INF/blueprint/camel-context.xml
@@ -0,0 +1,35 @@
+<?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://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0 
http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.0.0.xsd
+                               http://www.osgi.org/xmlns/blueprint/v1.0.0 
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+                               http://camel.apache.org/schema/blueprint   
http://camel.apache.org/schema/blueprint/camel-blueprint.xsd";>
+
+  <cm:property-placeholder id="placeholder" 
persistent-id="org.apache.camel.example.fhir.osgi.configuration" />
+
+  <bean id="fhirRoute" class="org.apache.camel.example.fhir.osgi.FhirRoute"/>
+
+  <camelContext id="camel-fhir" 
xmlns="http://camel.apache.org/schema/blueprint";>
+    <routeBuilder ref="fhirRoute"/>
+  </camelContext>
+
+</blueprint>
diff --git 
a/examples/camel-example-fhir-osgi/src/main/resources/log4j2.properties 
b/examples/camel-example-fhir-osgi/src/main/resources/log4j2.properties
new file mode 100644
index 0000000..9deb51c
--- /dev/null
+++ b/examples/camel-example-fhir-osgi/src/main/resources/log4j2.properties
@@ -0,0 +1,23 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.console.type = Console
+appender.console.name = console
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+rootLogger.level = INFO
+rootLogger.appenderRef.console.ref = console
diff --git 
a/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/FhirOsgiIT.java
 
b/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/FhirOsgiIT.java
new file mode 100644
index 0000000..2742a44
--- /dev/null
+++ 
b/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/FhirOsgiIT.java
@@ -0,0 +1,77 @@
+/**
+ * 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.example.fhir.osgi;
+
+import javax.inject.Inject;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ServiceStatus;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.ops4j.pax.tinybundles.core.TinyBundles;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.streamBundle;
+import static org.ops4j.pax.exam.CoreOptions.when;
+import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.debugConfiguration;
+import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut;
+
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerClass.class)
+public class FhirOsgiIT {
+
+    @Inject
+    private CamelContext context;
+
+    @Configuration
+    public Option[] config() throws IOException {
+        return options(
+            PaxExamOptions.KARAF.option(),
+            PaxExamOptions.CAMEL_FHIR.option(),
+            streamBundle(
+                TinyBundles.bundle()
+                    .read(
+                        Files.newInputStream(
+                            Paths.get("target")
+                                .resolve("camel-example-fhir-osgi.jar")))
+                    .build()),
+            when(false)
+                .useOptions(
+                    debugConfiguration("5005", true)),
+            CoreOptions.composite(editConfigurationFilePut(
+                "etc/org.apache.camel.example.fhir.osgi.configuration.cfg",
+                new 
File("org.apache.camel.example.fhir.osgi.configuration.cfg")))
+        );
+    }
+
+    @Test
+    public void testRouteStatus() {
+        assertNotNull(context);
+        assertEquals("Route status is incorrect!", ServiceStatus.Started, 
context.getRouteStatus("fhir-example-osgi"));
+    }
+}
diff --git 
a/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/PaxExamOptions.java
 
b/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/PaxExamOptions.java
new file mode 100644
index 0000000..daae9cb
--- /dev/null
+++ 
b/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/PaxExamOptions.java
@@ -0,0 +1,72 @@
+/**
+ * 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.example.fhir.osgi;
+
+import java.io.File;
+
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.karaf.options.LogLevelOption;
+import org.ops4j.pax.exam.options.DefaultCompositeOption;
+
+import static org.ops4j.pax.exam.CoreOptions.maven;
+import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.configureConsole;
+import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features;
+import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.karafDistributionConfiguration;
+import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.keepRuntimeFolder;
+import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.logLevel;
+
+public enum PaxExamOptions {
+
+    KARAF(
+        karafDistributionConfiguration()
+            .frameworkUrl(
+                maven()
+                    .groupId("org.apache.karaf")
+                    .artifactId("apache-karaf")
+                    .versionAsInProject()
+                    .type("zip"))
+            .name("Apache Karaf")
+            .useDeployFolder(false)
+            .unpackDirectory(new File("target/paxexam/unpack/")),
+        keepRuntimeFolder(),
+        // Don't bother with local console output as it just ends up 
cluttering the logs
+        configureConsole().ignoreLocalConsole(),
+        // Force the log level to INFO so we have more details during the 
test. It defaults to WARN.
+        logLevel(LogLevelOption.LogLevel.INFO)
+    ),
+    CAMEL_FHIR(
+        features(
+            maven()
+                .groupId("org.apache.camel.karaf")
+                .artifactId("apache-camel")
+                .type("xml")
+                .classifier("features")
+                .versionAsInProject(),
+            "camel-blueprint","camel-fhir", "camel-hl7")
+    ),
+    ;
+
+    private final Option[] options;
+
+    PaxExamOptions(Option... options) {
+        this.options = options;
+    }
+
+    public Option option() {
+        return new DefaultCompositeOption(options);
+    }
+}
diff --git a/examples/pom.xml b/examples/pom.xml
index 1ab7918..bc2ae0f 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -46,6 +46,7 @@
     <module>camel-example-cdi-aws-s3</module>
     <module>camel-example-cdi-cassandraql</module>
     <module>camel-example-fhir</module>
+    <module>camel-example-fhir-osgi</module>
     <module>camel-example-cdi-kubernetes</module>
     <module>camel-example-cdi-metrics</module>
     <module>camel-example-cdi-osgi</module>

Reply via email to