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 <qu...@pronoia-solutions.com> 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 <bohnje...@yahoo.com.INVALID> > 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 > <bohnje...@yahoo.com> 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 <qu...@pronoia-solutions.com> 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 <bohnje...@yahoo.com.INVALID> >> 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 >> <qu...@pronoia-solutions.com> 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 <bohnje...@yahoo.com.INVALID> >>> 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 >>> <qu...@pronoia-solutions.com> 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 <bohnje...@yahoo.com.INVALID> >>>> 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> >>>>