Again.. Quinn.. Thanks!
OK.. now I feel this is a Karaf issue inside a Camel forum (sorry folks).I did
install that hapi "bundle" into Karaf... that only made it complain about
camel-sql, but given your example, I found the "bundle" to install for that..
then it complained about apache.commons.dbcp2.. installed that.. then it
complained about camel sql again? and spring? I don't even have reference to
spring in my project?
Unable to start bundle mvn:org.ZZZ.camel/EDMtoPSoft-java/1.0.0:
org.osgi.framework.BundleException: Unable to resolve EDMtoPSoft-java [74](R
74.0): missing requirement [EDMtoPSoft-java [74](R 74.0)] osgi.wiring.package;
(&(osgi.wiring.package=org.apache.camel.component.sql)(version>=2.21.0)(!(version>=3.0.0)))
[caused by: Unable to resolve org.apache.camel.camel-sql [78](R 78.0):missing
requirement [org.apache.camel.camel-sql [78](R 78.0)] osgi.wiring.package;
(&(osgi.wiring.package=org.springframework.dao)(version>=4.1.0)(!(version>=5.0.0)))]
Unresolved requirements: [[EDMtoPSoft-java [74](R 74.0)] osgi.wiring.package;
(&(osgi.wiring.package=org.apache.camel.component.sql)(version>=2.21.0)(!(version>=3.0.0)))]
Are these dependencies supposed to be listed under the Felix plugin as export
packages?
On Monday, October 22, 2018, 9:32:22 PM EDT, Quinn Stevenson
<[email protected]> wrote:
You’ll need to add HAPI to the container
install mvn:ca.uhn.hapi/hapi-osgi-base/2.3
> On Oct 22, 2018, at 9:12 AM, John F. Berry <[email protected]>
> wrote:
>
>
>
> I have added these to the POM... just in case that solved the Karaf issue.
> No luck!
>
> <dependency>
> <groupId>ca.uhn.hapi</groupId>
> <artifactId>hapi-base</artifactId>
> <version>2.1</version>
> </dependency>
>
> <dependency>
> <groupId>ca.uhn.hapi</groupId>
> <artifactId>hapi-osgi-base</artifactId>
> <version>2.0</version>
> </dependency>
>
>
>
>
> On Monday, October 22, 2018, 9:34:31 AM EDT, John F. Berry
> <[email protected]> wrote:
>
>
>
>
>
> You've been so much help Quinn, thanks!
> I did not realize you could import a bundle though maven like that
>
> So close...
>
> I got an error because of some unresolved requirements with OSGi and my hl7
> parsing package:
>
> osgi.wiring.package; (osgi.wiring.package=ca.uhn.hl7v2.model) Unresolved
> requirements: [[EDMtoPSoft-java [71](R 71.0)] osgi.wiring.package;
> (osgi.wiring.package=ca.uhn.hl7v2.model)
>
> I do have this set under the felix plugin:
> <Import-Package>*</Import-Package>
>
> I did notice I was missing a dependency in my POM
> but it is being imported in my routebuilder java:
> import ca.uhn.hl7v2.model.Message;
> import ca.uhn.hl7v2.util.Terser;
> import ca.uhn.hl7v2.DefaultHapiContext;
> import ca.uhn.hl7v2.HL7Exception;
> import ca.uhn.hl7v2.HapiContext;
>
> I assume I should have this declared as a POM dependency? I've tried a few
> blind tries at declaring something, but can't seem to get it.
>
>
>
> On Thursday, October 18, 2018 10:53:10 PM EDT, Quinn
> Stevenson <[email protected]> wrote:
>
>
>
>
>
> I could be a Karaf install issue. The Karaf setup is usually pretty simple
> - expand the Karaf archive
> - start Karaf ( $KARAF_HOME/bin/start )
> - login to the Karaf console ($KARAF_HOME/bin/client)
> - add the Came feature repositoryl into the Karaf container (
> feature:repo-add camel 2.21.1)
> - install Camel into the container ( feature:install camel )
>
> At that point, you should be able to see some Camel bundles when you list
> the bundles in the container ( list )
>
> Now, your “bundle” is just your jar (with the OSGi bundle metadata in the
> MANIFEST.MF - that’s what the maven-bundle-plugin adds). Assuming you’re
> bundle doesn’t require anything outside of camel-core, you should be able to
> install your bundle in your local Maven repository (mvn install), and then
> install it into Karaf from the Karaf console ( install -s
> mvn:group-id/artifact-id/version ).
>
> Another option is to you the file deployer. If you have a simple Camel
> Blueprint route, you can put the XML file in the $KARAF_HOME/deploy directory
> and the context should start.
>
> BTW - the error below isn’t a Java error - it’s a Blueprint error. Something
> went wrong when Blueprint tried to execute the definitions in your Blueprint
> XML file.
>
>> On Oct 17, 2018, at 8:53 AM, John F. Berry <[email protected]>
>> wrote:
>>
>> Thanks Quinn for your advice and patience (and for the rest of the forum
>> members!)
>>
>> I did attempt to make the changes below.. and to research the elements you
>> presented to understand them better.. However, I'm still at an impasse.
>> I still cannot "deploy" into Karaf.. Perhaps this is a Karaf install issue
>> and have also discussed this in that forum.
>> What exactly is the "bundle" to deploy? Is it the entire project directory
>> and its contents?
>>
>> A side note: I've attempted to create a new maven generated
>> camel-archetype-blueprint project (selection 1187 from the archetype list in
>> maven 3.5.3) and upon installing it (with no mods), I get a java error:
>> [ Blueprint Extender: 1] BlueprintContainerImpl INFO
>> Blueprint bundle org.apache.aries.blueprint.core/1.10.0 has been started[
>> Blueprint Extender: 2] BlueprintContainerImpl ERROR Unable to
>> start container for blueprint bundle org.apache.camel.camel-blueprint/2.22.1
>> org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to
>> instantiate components
>>
>> So I was planning to start this new project and attempt deployment to
>> Karaf.. and add the steps of my route one at a time.. but I cannot even
>> start with this one!
>>
>> Thanks!
>>
>>
>> On Wednesday, September 5, 2018, 10:18:53 AM EDT, Quinn Stevenson
>> <[email protected]> wrote:
>>
>>
>>
>>
>>
>> Assuming you’re using Maven, you can use the maven-bundle-plugin to generate
>> the OSGi metadata in the MANIFEST.MF (which is what makes a jar a bundle).
>> You’ll add something like the following to your build plugins
>>
>> <plugin>
>> <groupId>org.apache.felix</groupId>
>> <artifactId>maven-bundle-plugin</artifactId>
>> <version>3.5.0</version>
>> <extensions>true</extensions>
>> </plugin>
>>
>> and you’ll need to change the <packaging> element to bundle for your
>> artifact. If you were creating a jar before you may not have the packaging
>> element (since jar is the default for this), so you may need to add it.
>> Here’s an example from one of my other projects
>>
>> <groupId>com.github.hqstevenson.splunk</groupId>
>> <artifactId>splunk.httpec</artifactId>
>> <packaging>bundle</packaging>
>> <version>1.5.1</version>
>>
>> After you have a bundle, you can install it into Karaf however you’d like -
>> putting the bundle in the deploy folder is one way. BTW - if you still had
>> the Blueprint/XML version of the route, you could put the XML file into the
>> deploy folder as well - Karaf would run it for you, and you wouldn’t have to
>> package it in bundle (I have a few customers that do this in some cases).
>>
>>
>>> On Sep 5, 2018, at 7:17 AM, John F. Berry <[email protected]>
>>> wrote:
>>>
>>> Thanks Quinn,
>>> I haven't converted my jar at all.. I've only packaged my camel java DSL
>>> project into an executable jar from maven.
>>> So I think you're giving me step #2 of a process if I already converted my
>>> jar to an OSGi bundle. I haven't and don't know offhand how to.
>>> If I had this jar as an OSGi bundle, couldn't I simply place it in the
>>> deploy folder of Karaf?
>>>
>>> Sorry folks! I know this is a Camel thread not a Karaf or OSGi forum.
>>>
>>>
>>> On Wednesday, September 5, 2018, 9:10:33 AM EDT, Quinn Stevenson
>>> <[email protected]> wrote:
>>>
>>>
>>>
>>> The easiest way to bootstrap a route in Karaf is to use Blueprint. I’m
>>> assuming you’ve already converted your jar to an OSGi bundle.
>>>
>>> If you add a small XML file to src/main/resources/OSGI-INF/blueprint
>>> (assuming you’re using Maven for this) the route should startup in Karaf
>>> when you install your bundle. The XML file will look something like this
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
>>>
>>> <bean id="route-builder" class="my.route.Builder" />
>>>
>>> <camelContext xmlns="http://camel.apache.org/schema/blueprint">
>>> <routeBuilder ref="route-builder" />
>>> </camelContext>
>>>
>>> </blueprint>
>>>
>>> HTH
>>>
>>>
>>>> On Sep 4, 2018, at 10:10 AM, John F. Berry <[email protected]>
>>>> wrote:
>>>>
>>>> I've posted a few questions over the past month about various steps in a
>>>> camel route. I had developed both a Spring version and a Java DSL version
>>>> simultaneously at the beginning, because of either the lack or abundance
>>>> of certain endpoint development in each. The Java DSL version worked out
>>>> best in the continuing development, but then the "powers that be" asked me
>>>> to make a Windows service for it.
>>>> I ended up being able to package it to en executable jar, but then found
>>>> that perhaps I should use Karaf as an OSGi container run as a windows
>>>> service. I have Karaf installed with it's awaiting service container, but
>>>> it looks like it's a pain to configure a Camel Java DSL route to an OSGi
>>>> container, but what I did seem to find was people have used a Spring OSGi
>>>> Camel package and overrode the configuration to execute a java "bean".
>>>> My question is: Can the entire Camel Context developed in Spring be
>>>> pointed to the completed Java DSL developed package? Can I just add a
>>>> shell around my already completed work? My route runs fine from maven
>>>> using "mvn exec:java" or running java - jar <package> .
>>>> Now that I got this running, I'd rather not disassemble and re-wire,
>>>> although it would be a good educational experience.
>>>>
>>>> MyRouteBuilder.java :
>>>>
>>>> import java.util.Base64;
>>>> import org.apache.camel.spi.DataFormat;
>>>>
>>>>
>>>> import ca.uhn.hl7v2.parser.Parser;
>>>> import org.apache.commons.dbcp2.BasicDataSource;
>>>> import org.apache.camel.component.sql.SqlComponent;
>>>>
>>>> public class MyRouteBuilder extends RouteBuilder {
>>>> @Override
>>>> public void configure() throws Exception {
>>>> BasicDataSource basicDataSource = new BasicDataSource();
>>>>
>>>>basicDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
>>>>
>>>>basicDataSource.setUrl("jdbc:sqlserver://XXX:52739;databaseName=XXX;");
>>>> basicDataSource.setUsername("XXX");
>>>> basicDataSource.setPassword("XXX");
>>>> SqlComponent sqlComponent = new SqlComponent();
>>>> sqlComponent.setDataSource(basicDataSource);
>>>> getContext().addComponent("psoft-sql", sqlComponent);
>>>>
>>>>
>>>> from("mllp://ZZZ:8888")
>>>> .log("..Received HL7 message with control id
>>>>${header.CamelMllpMessageControlId}")
>>>> .convertBodyTo(String.class)
>>>> .unmarshal()
>>>> .hl7(false)
>>>> .process(new Processor() {
>>>> public void process(Exchange exchange) throws Exception {
>>>> Message message = exchange.getIn().getBody(Message.class);
>>>> ca.uhn.hl7v2.util.Terser terser = new Terser(message);
>>>> String obx5 = terser.get("/.OBX-5-5");
>>>> String EDMId = terser.get("/.OBR-3") + ".pdf";
>>>> String voucher = terser.get("/.OBR-2");
>>>>
>>>> byte[] decoded = Base64.getDecoder().decode(obx5);
>>>> exchange.getOut().setBody(decoded);
>>>> exchange.getOut().setHeader("voucher", voucher);
>>>> exchange.getOut().setHeader("CamelFileName", EDMId );
>>>> }
>>>> } )
>>>> .log("..Processed voucher ${header.voucher} to file
>>>>${header.CamelFileName}")
>>>> .to("file:target/messages/others")
>>>> .recipientList(simple("psoft-sql:INSERT INTO lawsonprod.PeopleSoftVCR
>>>>(Voucher, Facility, image) VALUES ('12345', '1',
>>>>'${header.CamelFileName}')") )
>>>> ;
>>>>
>>>> }
>>>>
>>>> }
>>>>
>>>> POM.xml (given there's a lot of extras in here not used due to attempts
>>>> during development)
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <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>
>>>>
>>>> <groupId>org.ZZZ.camel</groupId>
>>>> <artifactId>EDMtoPSoft-java</artifactId>
>>>> <packaging>jar</packaging>
>>>> <version>1.0-SNAPSHOT</version>
>>>>
>>>> <name>EDM base64 HL7 documents to PeopleSoft</name>
>>>>
>>>> <properties>
>>>> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>>>
>>>><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
>>>> </properties>
>>>>
>>>> <dependencyManagement>
>>>> <dependencies>
>>>> <!-- Camel BOM -->
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-parent</artifactId>
>>>> <version>2.21.1</version>
>>>> <scope>import</scope>
>>>> <type>pom</type>
>>>> </dependency>
>>>> </dependencies>
>>>> </dependencyManagement>
>>>>
>>>> <dependencies>
>>>>
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-core</artifactId>
>>>> </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>
>>>>
>>>> <!-- testing -->
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-test</artifactId>
>>>> <scope>test</scope>
>>>> </dependency>
>>>>
>>>> <dependency>
>>>> <groupId>javax.xml.bind</groupId>
>>>> <artifactId>jaxb-api</artifactId>
>>>> <version>2.2.11</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>javax.activation</groupId>
>>>> <artifactId>activation</artifactId>
>>>> <version>1.1.1</version>
>>>> </dependency>
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-mllp</artifactId>
>>>> <version>2.21.1</version>
>>>> </dependency>
>>>>
>>>> <!-- Project stuff -->
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-hl7</artifactId>
>>>> <version>2.21.1</version>
>>>> </dependency>
>>>>
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-netty4</artifactId>
>>>> <version>2.21.1</version>
>>>> </dependency>
>>>>
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-base64</artifactId>
>>>> <version>2.21.1</version>
>>>> </dependency>
>>>>
>>>> <dependency>
>>>> <groupId>org.apache.camel</groupId>
>>>> <artifactId>camel-sql</artifactId>
>>>> <version>2.21.1</version>
>>>> </dependency>
>>>>
>>>> <dependency>
>>>> <groupId>org.apache.commons</groupId>
>>>> <artifactId>commons-dbcp2</artifactId>
>>>> <version>2.5.0</version>
>>>> </dependency>
>>>>
>>>> <dependency>
>>>> <groupId>com.microsoft.sqlserver</groupId>
>>>> <artifactId>mssql-jdbc</artifactId>
>>>> <version>7.0.0.jre10</version>
>>>> </dependency>
>>>>
>>>>
>>>> </dependencies>
>>>>
>>>> <build>
>>>> <defaultGoal>install</defaultGoal>
>>>>
>>>> <plugins>
>>>> <plugin>
>>>> <groupId>org.apache.maven.plugins</groupId>
>>>> <artifactId>maven-compiler-plugin</artifactId>
>>>> <version>3.7.0</version>
>>>> <configuration>
>>>> <source>1.8</source>
>>>> <target>1.8</target>
>>>> </configuration>
>>>> </plugin>
>>>> <plugin>
>>>> <groupId>org.apache.maven.plugins</groupId>
>>>> <artifactId>maven-resources-plugin</artifactId>
>>>> <version>3.0.2</version>
>>>> <configuration>
>>>> <encoding>UTF-8</encoding>
>>>> </configuration>
>>>> </plugin>
>>>>
>>>> <!-- Allows the example to be run via 'mvn compile exec:java' -->
>>>> <plugin>
>>>> <groupId>org.codehaus.mojo</groupId>
>>>> <artifactId>exec-maven-plugin</artifactId>
>>>> <version>1.6.0</version>
>>>> <configuration>
>>>> <mainClass>org.ZZZ.camel.MainApp</mainClass>
>>>> <includePluginDependencies>false</includePluginDependencies>
>>>> </configuration>
>>>> </plugin>
>>>>
>>>> <plugin>
>>>> <artifactId>maven-assembly-plugin</artifactId>
>>>> <configuration>
>>>> <descriptorRefs>
>>>> <descriptorRef>jar-with-dependencies</descriptorRef>
>>>> </descriptorRefs>
>>>> <archive>
>>>> <manifest>
>>>> <mainClass>org.ZZZ.camel.MainApp</mainClass>
>>>> </manifest>
>>>> </archive>
>>>> </configuration>
>>>> <executions>
>>>> <execution>
>>>>
>>>> <phase>package</phase> <!-- bind to the packaging
>>>>phase -->
>>>> <goals>
>>>> <goal>single</goal>
>>>> </goals>
>>>> </execution>
>>>> </executions>
>>>> </plugin>
>>>>
>>>>
>>>> <plugin>
>>>> <groupId>org.apache.felix</groupId>
>>>> <artifactId>maven-bundle-plugin</artifactId>
>>>> <version>2.3.7</version>
>>>> <extensions>true</extensions>
>>>> <configuration>
>>>> <instructions>
>>>> <Bundle-Name>${project.name}</Bundle-Name>
>>>>
>>>><Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
>>>> <Export-Package>
>>>> org.ZZZ.camel
>>>> </Export-Package>
>>>> </instructions>
>>>> </configuration>
>>>> </plugin>
>>>>
>>>> </plugins>
>>>> </build>
>>>>
>>>> </project>
>>>>