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>

Reply via email to