Getting started

Follow below steps to start working with our connector within your Mule applications.

Installation

Add below maven dependency and repository to your Mule application's pom.xml, change 2.0.3 with plugin's version you want to use:

<dependency>
    <groupId>com.hawkore.mule.extensions</groupId>
    <artifactId>mule-sap-jco-connector</artifactId>
    <version>2.0.3</version>
    <classifier>mule-plugin</classifier>
</dependency>
<repository>
    <id>public.hawkore.releases</id>
    <name>Hawkore Public Repository</name>
    <url>https://repository.hawkore.com/maven2/</url>
    <layout>default</layout>
</repository>
Sample

Take a look to sample project at Github

Download third-party SAP's libraries

You need to download SAP IDoc and SAP JCo java/native libraries from SAP's repository for customers and optionally install them into your local maven repository for your convenience.

Ignore below steps whether you prefer add those libraries using configuration wizard in Anypoint Studio 7+, and ensure SAP's libraries are added as dependencies and as shared libraries1:

sap-jco-config

<!-- SAP JCo java library -->
<dependency>
    <groupId>com.sap</groupId>
    <artifactId>com.sap.conn.jco.sapjco3</artifactId>
    <version>${sap.jco.version}</version>
</dependency>
<!-- SAP IDoc java library -->
<dependency>
    <groupId>com.sap</groupId>
    <artifactId>com.sap.conn.idoc.sapidoc3</artifactId>
    <version>${sap.jco.version}</version>
</dependency>
<!-- SAP JCo native library -->
<dependency>
    <groupId>com.sap</groupId>
    <artifactId>com.sap.conn.jco.sapjco3-native</artifactId>
    <version>${sap.jco.version}</version>
    <classifier>${envClassifier}</classifier>
    <type>${envType}</type>
</dependency>
<plugin>
    <groupId>org.mule.tools.maven</groupId>
    <artifactId>mule-maven-plugin</artifactId>
    <version>${mule.maven.plugin.version}</version>
    <extensions>true</extensions>
    <configuration>
        <sharedLibraries>
            <!-- SAP JCo shared java library -->
            <sharedLibrary>
                <groupId>com.sap</groupId>
                <artifactId>com.sap.conn.jco.sapjco3</artifactId>
            </sharedLibrary>
            <!-- SAP IDoc shared java library -->
            <sharedLibrary>
                <groupId>com.sap</groupId>
                <artifactId>com.sap.conn.idoc.sapidoc3</artifactId>
            </sharedLibrary>
            <!-- SAP JCo shared native library -->
            <sharedLibrary>
                <groupId>com.sap</groupId>
                <artifactId>com.sap.conn.jco.sapjco3-native</artifactId>
            </sharedLibrary>
        </sharedLibraries>
    </configuration>
</plugin>
Install third-party SAP's libraries

Some samples to install SAP libraries into your local maven repository.

Install sapjco3.jar and sapidoc3.jar java libraries, version 3.0.19

Avoid internal SAP jar name verification

sapjco3/sapidoc3 artifactId must start with com.sap.conn.jco./com.sap.conn.idoc. respectively to avoid internal jar name verification error since version 3.0.11.

mvn install:install-file -Dfile=sapjco3.jar -DgroupId=com.sap -DartifactId=com.sap.conn.jco.sapjco3 -Dversion=3.0.19 -Dpackaging=jar
mvn install:install-file -Dfile=sapidoc3.jar -DgroupId=com.sap -DartifactId=com.sap.conn.idoc.sapidoc3 -Dversion=3.0.19 -Dpackaging=jar
Install Native library for MacOS 32 bits, version 3.0.19
mvn install:install-file -DgroupId=com.sap -DartifactId=com.sap.conn.jco.sapjco3-native -Dversion=3.0.19 -Dclassifier=darwinintel -Dpackaging=jnilib -Dfile=./native/osx32/libsapjco3.jnilib
Install Native library for Linux 32 bits, version 3.0.19
mvn install:install-file -DgroupId=com.sap -DartifactId=com.sap.conn.jco.sapjco3-native -Dversion=3.0.19 -Dclassifier=linuxintel -Dpackaging=so -Dfile=./native/linux32/libsapjco3.so
Install Native library for Windows/dos 32 bits, version 3.0.19
mvn install:install-file -DgroupId=com.sap -DartifactId=com.sap.conn.jco.sapjco3-native -Dversion=3.0.19 -Dclassifier=ntintel -Dpackaging=dll -Dfile=./native/win32/sapjco3.dll
Install Native library for MacOS 64 bits, version 3.0.19
mvn install:install-file -DgroupId=com.sap -DartifactId=com.sap.conn.jco.sapjco3-native -Dversion=3.0.19 -Dclassifier=darwinintel64 -Dpackaging=jnilib -Dfile=./native/osx64/libsapjco3.jnilib
Install Native library for Linux x86 64 bits, version 3.0.19
mvn install:install-file -DgroupId=com.sap -DartifactId=com.sap.conn.jco.sapjco3-native -Dversion=3.0.19 -Dclassifier=linuxx86_64 -Dpackaging=so -Dfile=./native/linux64/libsapjco3.so
Install Native library for Windows/dos AMD 64 bits, version 3.0.19
mvn install:install-file -DgroupId=com.sap -DartifactId=com.sap.conn.jco.sapjco3-native -Dversion=3.0.19 -Dclassifier=ntamd64 -Dpackaging=dll -Dfile=./native/win64/sapjco3.dll

Once SAP's libraries are installed into your local maven repository, add them as depencencies and as shared libraries into your Mule application's pom.

Read below step for your convenience.

Mule application's pom.xml template

You can use below Mule application pom.xml file template to easy develop Mule applications that connects to remote SAP ECC using our connector.

Mule application's pom.xml file template
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>com.mycompany</groupId>
  <artifactId>my-mule-app-with-hk-sap-jco-connector</artifactId>
  <version>2.0.0-SNAPSHOT</version>
  <packaging>mule-application</packaging>

  <name>my-mule-app-with-hk-sap-jco-connector</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <app.runtime>4.2.2</app.runtime>
    <mule.maven.plugin.version>3.2.7</mule.maven.plugin.version>

    <!-- this connector version for Mule 4 (change with the version you want to use) -->
    <hk.sap.jco.connector.version>2.0.3</hk.sap.jco.connector.version>

    <!-- SAP JCo libraries version (change with the local installed version you want to use) -->
    <sap.jco.version>3.0.19</sap.jco.version>

    <munit.version>2.2.3</munit.version>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.mule.tools.maven</groupId>
        <artifactId>mule-maven-plugin</artifactId>
        <version>${mule.maven.plugin.version}</version>
        <extensions>true</extensions>
        <configuration>
          <sharedLibraries>
            <!-- SAP JCo shared java library -->
            <sharedLibrary>
                <groupId>com.sap</groupId>
                <artifactId>com.sap.conn.jco.sapjco3</artifactId>
            </sharedLibrary>
            <!-- SAP IDoc shared java library -->
            <sharedLibrary>
                <groupId>com.sap</groupId>
                <artifactId>com.sap.conn.idoc.sapidoc3</artifactId>
            </sharedLibrary>
            <!-- SAP JCo shared native library -->
            <sharedLibrary>
                <groupId>com.sap</groupId>
                <artifactId>com.sap.conn.jco.sapjco3-native</artifactId>
            </sharedLibrary>
          </sharedLibraries>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.mulesoft.munit.tools</groupId>
        <artifactId>munit-maven-plugin</artifactId>
        <version>${munit.version}</version>
        <executions>
          <execution>
            <id>test</id>
            <phase>test</phase>
            <goals>
              <goal>test</goal>
              <goal>coverage-report</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <coverage>
            <runCoverage>true</runCoverage>
            <formats>
              <format>html</format>
            </formats>
          </coverage>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.mule.connectors</groupId>
      <artifactId>mule-http-connector</artifactId>
      <version>1.5.4</version>
      <classifier>mule-plugin</classifier>
    </dependency>
    <dependency>
      <groupId>org.mule.connectors</groupId>
      <artifactId>mule-sockets-connector</artifactId>
      <version>1.1.5</version>
      <classifier>mule-plugin</classifier>
    </dependency>

    <!-- HK connector for Mule 4-->
    <dependency>
      <groupId>com.hawkore.mule.extensions</groupId>
      <artifactId>mule-sap-jco-connector</artifactId>
      <version>${hk.sap.jco.connector.version}</version>
      <classifier>mule-plugin</classifier>
    </dependency>

    <!-- SAP dependencies -->
    <!-- SAP JCo java library -->
    <dependency>
        <groupId>com.sap</groupId>
        <artifactId>com.sap.conn.jco.sapjco3</artifactId>
        <version>${sap.jco.version}</version>
    </dependency>
    <!-- SAP IDoc java library -->
    <dependency>
        <groupId>com.sap</groupId>
        <artifactId>com.sap.conn.idoc.sapidoc3</artifactId>
        <version>${sap.jco.version}</version>
    </dependency>
    <!-- SAP JCo native library -->
    <dependency>
        <groupId>com.sap</groupId>
        <artifactId>com.sap.conn.jco.sapjco3-native</artifactId>
        <version>${sap.jco.version}</version>
        <classifier>${envClassifier}</classifier>
        <type>${envType}</type>
    </dependency>

    <!-- MUNIT test dependencies (optional) -->
    <dependency>
      <groupId>com.mulesoft.munit</groupId>
      <artifactId>munit-runner</artifactId>
      <version>2.1.5</version>
      <classifier>mule-plugin</classifier>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.mulesoft.munit</groupId>
      <artifactId>munit-tools</artifactId>
      <version>2.1.5</version>
      <classifier>mule-plugin</classifier>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!-- NATIVE SAP JCo library resolution based on local OS/platform detection -->
  <profiles>
    <profile>
      <id>dos-i386</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>windows</family>
          <arch>i386</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntintel</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>windows-i386</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>windows</family>
          <arch>i386</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntintel</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>dos-x86</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>dos</family>
          <arch>x86</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntintel</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>windows-x86</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>windows</family>
          <arch>x86</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntintel</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>dos-x86_64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>dos</family>
          <arch>x86_64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntamd64</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>windows-x86_64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>windows</family>
          <arch>x86_64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntamd64</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>dos-amd64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>dos</family>
          <arch>amd64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntamd64</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>windows-amd64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <family>windows</family>
          <arch>amd64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>ntamd64</envClassifier>
        <envType>dll</envType>
        <native.lib.filename>sapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>linux-i386</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>linux</name>
          <arch>i386</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>linuxintel</envClassifier>
        <envType>so</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>linux-x86</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>linux</name>
          <arch>x86</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>linuxintel</envClassifier>
        <envType>so</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>linux-x86_64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>linux</name>
          <arch>x86_64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>linuxx86_64</envClassifier>
        <envType>so</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>linux-amd64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>linux</name>
          <arch>amd64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>linuxx86_64</envClassifier>
        <envType>so</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>macosx-i386</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>mac os x</name>
          <arch>i386</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>darwinintel</envClassifier>
        <envType>jnilib</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>macosx-x86</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>mac os x</name>
          <arch>x86</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>darwinintel</envClassifier>
        <envType>jnilib</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>macosx-x86_64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>mac os x</name>
          <arch>x86_64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>darwinintel64</envClassifier>
        <envType>jnilib</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
    <profile>
      <id>macosx-amd64</id>
      <activation>
        <property>
          <name>!disable-os-detection</name>
        </property>
        <os>
          <name>mac os x</name>
          <arch>amd64</arch>
        </os>
      </activation>
      <properties>
        <envClassifier>darwinintel64</envClassifier>
        <envType>jnilib</envType>
        <native.lib.filename>libsapjco3</native.lib.filename>
      </properties>
    </profile>
  </profiles>

  <repositories>
    <repository>
      <id>public.hawkore.releases</id>
      <name>Hawkore Public Repository</name>
      <url>https://repository.hawkore.com/maven2/</url>
      <layout>default</layout>
    </repository>
    <repository>
      <id>anypoint-exchange</id>
      <name>Anypoint Exchange</name>
      <url>https://maven.anypoint.mulesoft.com/api/v1/maven</url>
      <layout>default</layout>
    </repository>
    <repository>
      <id>mulesoft-releases</id>
      <name>MuleSoft Releases Repository</name>
      <url>https://repository.mulesoft.org/releases/</url>
      <layout>default</layout>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <id>mulesoft-releases</id>
      <name>mulesoft release repository</name>
      <layout>default</layout>
      <url>https://repository.mulesoft.org/releases/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>
</project>

This pom.xml file includes several profiles that load SAP JCo native library dinamically based on your OS/platform when developing, this is specially useful when several developers work on the same Mule application on different operating systems.

Package your Mule application for a specific OS/platform

As SAP JCo native library is required to communicate with SAP ECC, if you want to package your Mule application for running into a specific OS/platform you must manually package it by deactivating OS auto-detection and selecting pom's profile depending on target OS/platform to include the right SAP JCo native library.

Example: Package your Mule application to be deployed into a Mule Runtime running on a linux OS/intel 64 bits machine.

mvn clean package -Ddisable-os-detection -Plinux-x86_64

  1. ${sap.jco.version} is SAP libraries' version, ${envClassifier} is OS/platform identifier in witch your Mule application will run and ${type} is the native library extension (.so, .dll, ...)