Skip to main content
Version: 10.2.8

Configure no-code Generic Connector

Using the no-code Generic Connector, you can apply multiple configuration options to handle different connection scenarios and create custom connectors for the integration of external services into your automations.

Generic Connector types

There are several types of the no-code Generic Connector you can add to your Business Process (BP):

  • Generic Connector: a standard Bot Task that receives data from an AI Agent and sends it to an external system (the producer connector).
  • Generic Connector Trigger: a Trigger start element that retrieves data from an external system for processing by an AI Agent (the consumer connector).

Adding connector to Business Process workflow

To add the no-code Generic Connector to your BP workflow, perform the following steps:

  1. In the Business Processes list, open a needed BP instance or create a BP by clicking the Create New button.

  2. Add a Generic Connector of the required type:

Once you added the needed connector to your BP workflow, you can proceed to its configuration.

Add Generic Connector

To add the Generic Connector as a standard Bot Task to your BP, do as follows:

  1. Navigate to the Workflow tab, go to the side panel, and select the Bot tab.

  2. In the search field, enter Generic Connector as the desired connector.

  3. Move the pointer over the Generic Connector bot step and click Copy.

  4. Specify a suitable name corresponding to the intended task and click Save.

  5. Drag a copied step to the canvas. As a result, you create an independent step instance: the changes you make in the copy are not synchronized with the source.

    warning

    You must make a duplicate copy. Do not modify the original template.

Add Generic Connector Trigger

The Generic Connector Trigger or a Trigger step can only be the start element of your BP. To add it, do as follows:

  1. Navigate to the Workflow tab, go to the side panel, and select the Trigger tab.

  2. In the search field, enter Generic Connector Trigger as the desired connector.

  3. Move the pointer over the Generic Connector Trigger bot step and click Copy.

  4. Specify a suitable name corresponding to the intended task and click Save.

  5. Drag a copied step to the canvas. As a result, you create an independent step instance: the changes you make in the copy are not synchronized with the source.

    warning

    You must make a duplicate copy. Do not modify the original template.

Configuration

When you add the Generic Connector to your BP workflow, configure its settings:

  1. Double-click the Bot Task with the Generic Connector to open its configuration panel.

  2. Go to the Design tab. In the Connector dropdown list, select a needed configuration. The list of available options is fetched from the Generic Connector metadata table via the Data Store REST API.

  3. Fill in the needed fields and click Save. The configuration values, component dependencies, and the route template are injected into the Bot Task configuration to start the task execution.

info

You can add the Generic Connector functionality by entering the required metadata in the ds.ds_uc_genericconnector_component_v1 Data Store table.

ActiveMQ Producer

Configuration settings

Select ActiveMQ Producer (jms-activemq-v1.1) for the Bot Task to send messages to an active MQ queue. The step also passes the messages to the next step in the workflow.

Fill in the following settings:

  • Broker URL. Establish a connection to the ActiveMQ message broker using a connection string or URI that specifies the location and configuration details of the broker. It includes information like the protocol (for example, TCP), hostname or IP address, and port number where the ActiveMQ broker is running.

  • User Name. Enter a username for authentication when connecting to the ActiveMQ broker. Typically, it is part of the authentication process to ensure that only authorized users or applications can access and interact with the broker. Depending on the configuration, it can be used with a password.

  • Queque Name. Specify the name of a specific queue in the ActiveMQ broker. Queues are destinations for messages, and they follow the point-to-point messaging pattern, meaning messages sent to a queue are typically consumed by a single consumer. Queue names are used to identify where messages are sent and retrieved.

  • Password. Enter a secret or a password used in combination with a username to authenticate and establish a secure connection to the ActiveMQ broker. It ensures that only authorized users or applications can connect and perform operations on the broker.

    note

    In the screenshot above, the password and message are using parameter substitution to retrieve the data from Secrets Vault and the previous Bot Task.

  • Message. Typically, it is input from the previous step and can be referenced via the parameter substitution. In the context of Apache ActiveMQ, a message is a unit of data sent and received by applications through the message broker. ActiveMQ supports different message types, including text messages, binary messages, and more. Messages are published to topics or sent to queues and are consumed by consumers to facilitate communication and data exchange between applications.

  • Output Message Format (optional). Select the option to convert the message to one of the listed message formats before sending it to a queue:

    • Unwrap root object node. The feature determines the writing root values of the ObjectNode type (the JsonNode subtype that represents Object content values). If ObjectNode has only one key and value entry, select Yes to use the key of that entry as the root element name. If the root ObjectNode has any other number of key and value entries, select No to determine the root element name using the standard logic (either explicitly configured or ObjectNode otherwise).

    • Write null as xsi:nil. Select Yes for a field in your data containing a null value to be represented in the resulting XML as an element with the xsi:nil attribute set to true. It means the element has a null value and is not equivalent to an empty or missing element.

    • Write XML declaration. Select Yes to add the XML declaration at the beginning of an XML document.

    • Write XML 1.1. Select Yes to apply XML 1.1 for the output. In this case, certain aspects can differ from the default processing (1.0). For example, an XML declaration is automatically added (no matter if you enabled the Write XML declaration option) to define if the XML 1.1 compliant handling is used. You can apply XML 1.1 to allow quoted control characters (ASCII codes 0 through 31), additional line feeds, and name characters.

Big Query Select

Configuration settings

Select Big Query Select (bigquery-select-v1.1) for the Bot Task to execute a Big Query Select statement against BigQuery. The result is sent to the next step.

Specify the following required parameters:

  • JSON Credentials. Enter your JSON credentials for authentication in BigQuery. In the example below, the credentials are associated with a service account. For more details, see Create and delete service account keys | IAM Documentation | Google Cloud.
  • Query. A query in BigQuery is an SQL (Structured Query Language) statement used to interact with and analyze data stored in the BigQuery platform. It allows you to extract, transform, and analyze large datasets for various purposes, such as reporting, data exploration, and machine learning.

IBM MQ Producer

Configuration settings

Select IBM MQ Producer (jms-ibmmq-v1.1) for the Bot Task to send messages to an IBM MQ queue. The step also passes the messages to the next step in the workflow.

Specify the following required parameters:

  • Queue Manager. Specify the MQ queue manager name. The queue manager is a fundamental component in IBM MQ responsible for managing message queues. It controls the creation, administration, and routing of messages to and from various queues. Typically, each IBM MQ installation has one or more queue managers.

  • Connection Name. Enter the network address or hostname along with the port number used to establish a network connection between two queue managers through a communication channel. It specifies the destination queue manager to which messages are sent.

  • Queue Name. Enter the name of a specific queue within an IBM MQ queue manager. Applications can send messages to a queue or retrieve them from it using the queue name. Queue names are used to identify the destination of messages.

  • User Name. Enter the identification used for authentication when connecting to an IBM MQ queue manager. It is often used with a password to ensure secure access to the message queuing system.

  • Channel. Enter a communication pathway that allows messages to flow between two queue managers, whether on the same system or connected over a network. Channels are configured to establish connections and transmit data between queue managers. There are different channel types, such as sender, receiver, server, and client channels, each serving a specific purpose.

  • Application Name. Enter a user-defined identifier for the application or program that connects to the IBM MQ queue manager. It can help identify and monitor the source of connections in the queue manager's logs and monitoring tools.

  • Password. Enter a secret or credentials required for authentication when connecting to an IBM MQ queue manager, especially if authentication and security measures are in place. It is used with a username to establish a secure connection.

  • Message. Typically, it is input from the previous step and can be referenced via the parameter substitution. A message is the fundamental data unit in IBM MQ. It contains the actual data that applications send and receive through the messaging system. Messages can have various attributes and data types, and they are placed in queues for processing or transmission between applications.

  • Output Message Format (optional). Select the option to convert the message to one of the listed message formats before sending it to a queue:

    • XML
    • CSV
    • Fixed-Width

    For more details, see ActiveMQ Producer | Output Message Format.

Rest Client

Configuration settings

Rest Client (rest-client-v1.1) allows you to configure the Bot Task to connect to any available REST API, retrieve the data, and make it available for the next step. Using the connector, you can manually enter information about a REST endpoint or select one from the existing Swagger- or OpenAPI 2.0-compatible API.

Specify the following settings:

  • Import endpoints from JSON API (optional). Provide the API URL to load an existing API specification and click Import. Once endpoints are imported, more settings become available.

    • Select endpoint. Select an endpoint from the dropdown list to prepopulate the form with available parameters for the selected endpoint.

  • Method. Enter an HTTP method.

  • URI. Specify the REST URL.

  • Parameters:

    • Query Params: parameters located in the URL after the question mark. Specify one or more optional parameters to make your requests to the service more specific. Add Key-Value pairs.

    • Path Params: parameters that are part of the URL path. Specify the exact entity to which you want to refer the request. Add Name-Value pairs.

  • Body. Select a body data type and specify the exact data content to be sent with the request to the connected service.

    • none. Select not to send a body with a request.

    • x-www-form-urlencoded. Select to send Key-Value pairs encoded using the same pattern as that of URL parameters.

    • raw. Use raw body data to send anything you can enter as text.

      • Content-Type: the HTTP header content type, for example, application/json.
      • Content: a string representation of the body to be sent. It can also be a substitution parameter or contain substitution parameters.

  • Authorization. Set up the authorization type. The supported types are as follows:

    • None (no authorization)

    • Basic Authentication

    • Bearer Token

    • Bearer Token Uri

  • Headers. Set one or more headers if additional security checks are required for executing requests to the service. Add Key-Value pairs.

  • Output Options. Choose how to handle the results of connecting to the service.

    • Success options. Select how to handle the output for the next step in case of a successful connection.
    • Failure options. Select the option for a failed connection scenario.

ActiveMQ Consumer

Configuration settings

Select ActiveMQ Consumer (jms-activemq-v1.1_start) for the Trigger step to retrieve messages from the configured ActiveMQ queue.

The configuration properties are the same as for ActiveMQ Producer, except for having Input Message Format instead of Output Message Format:

  • Input Message Format (optional). Specify the format of messages read from the queue:

    • Split records. Select Yes to split the input data into multiple output records.

    • Content tag name. Specify a JSON element to be used as the content in XML.

    • Keep values as strings. Select Yes not to convert the values. In this case, they are retained as strings.

    • Write null as xsi:nil. Select Yes if you want the data field containing a null value to be represented in the resulting XML as an element with the xsi:nil attribute set to true. It means the element has a null value and is not equivalent to an empty or missing element.

    • Tags mapped to arrays. Add XML tags that should be converted to JSON arrays.

IBM MQ Consumer

Configuration settings

Select the IBM MQ Consumer (jms-ibmmq-v1.1_start) for the Trigger step to retrieve messages from the configured IBM MQ queue.

The configuration properties are the same as for IBM MQ Producer, except for having Input Message Format instead of Output Message Format.

Simple Timer

Configuration settings

Simple Timer (timer-v1.1_start) is based on the Camel simple timer. Specify the following settings:

  • Name. Enter a user-defined identifier for the timer event. Give a meaningful name to the timer that you can use to manage and reference timers when defining the timer's behavior in your Camel routes.

  • Period. Specify the time interval the timer event should trigger (in milliseconds). It defines the gap between successive occurrences of the timer event. For example, if you set the period to 5,000 milliseconds, the timer triggers every 5 seconds.

  • Delay. Spet up the time to wait before the first occurrence of the timer event (in milliseconds). It specifies the initial delay before the timer starts triggering events. If you set a delay of 1,000 milliseconds and a period of 5,000 milliseconds, the first timer event occurs 1 second after the timer is started, and subsequent events occur every 5 seconds.

  • Repeat Count. Specify how many times the timer event should be triggered. If you set the repeat count to a specific number, the timer triggers that many times. If the repeat count is not set or set to a negative value, the timer triggers indefinitely until stopped.

  • Fixed Rate.

    • Select True for the timer to trigger events at a fixed rate based on the period, even if the processing of timer events takes longer than the specified period.
    • Select False for the timer to maintain a fixed interval between the start times of each event, allowing events to overlap if processing takes longer.

Advanced settings

Define Connector via metadata

The Generic Connector allows for manually defining new types of connectors and adding them to the list of options. To do this, you should have a good understanding of the following concepts:

To add a new row to the database, perform the following steps:

  1. In Control Tower, go to Advanced > Data Stores and select the uc_genericconnector_component_v1 Data Store.

  2. Click Add Record.

  3. In the Record # window, fill in the following fields:

    • uuid: a unique identifier.
    • tenant_id: the tenant ID; can be left empty.
    • name: the component name. The value must contain no spaces and have only lower-case characters. It is recommended that you add a suffix with a version separated by a dash, for example, jms-ibmmq-v1.1.
    • description: the component description.
    • version: the component version.
    • enabled: enter true to enable the component. Otherwise, enter false.
    • created: the date when the component was created.
    • task_config: a specially formatted YAML structure representation of the component's routes and dependencies to be executed by the execution engine.
    See the example of task_config
    <![CDATA[
    {
    "component": "jms-activemq-v1.1",
    "config": {
    "queueName": "",
    "username": "",
    "password": "",
    "brokerURL": "",
    "requestBody": ""
    },
    "dependencies": [
    "org.apache.activemq:activemq-broker:5.16.5",
    "org.apache.activemq:activemq-client:5.16.5",
    "org.apache.activemq:activemq-openwire-legacy:5.16.5",
    "org.apache.camel:camel-activemq:3.20.6",
    "org.apache.camel:camel-jms:3.20.6",
    "org.apache.commons:commons-pool2:jar:2.11.1",
    "org.apache.geronimo.specs:geronimo-j2ee-management_1.1_spec:1.0.1",
    "org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1",
    "org.fusesource.hawtbuf:hawtbuf:1.11",
    "org.springframework:spring-jms:5.3.23"
    ],
    "route": "[{beans: [{type: org.apache.activemq.ActiveMQConnectionFactory, name: connectionFactory, properties: {brokerURL: '${brokerURL}', username: '${username}', password: '${password}'}}]}, {route: {id: generic-connector, from: {uri: 'direct:start', steps: [{to: {uri: 'jms:queue:${queueName}?connectionFactory=#connectionFactory'}}, {process: {ref: dataTypeTransformer}}]}}}]"
    }
    ]]>

    Where:

    • component: the component name; must be the same as the name in the table.

    • config: parameters to be used by the component. You can put the default values here.

    • dependencies: dependencies required to run the component. The JARs must exist in the local Nexus. If they do not exist, you must add them.

    • route: the Camel route to be executed. In the example above, the parameters in the config section are used as placeholders.

    • type: jnw or trigger.
    • ui_form: the JSON representation of the form created with the help of Form Builder.
    • ui_form_type: the type of the form library to be used to render the form. Currently, only Form.io is supported.

  4. Click Save.

Set up routing

A dynamic component configuration system consists of a user interface (UI) and a backend processing system. The UI allows you to select components, configure parameters, and schedule recurring processing. The backend system generates Camel YAML routes based on your inputs, executes the routes, and returns responses.

Every option in the Generic Connector has its own configuration form. The Route text area is the only component common to all options. It shows the Camel route executed by a Worker.

If you are familiar with Camel routing, you can modify this route, for example, add additional logging for debugging purposes.

  1. Expand the Show advanced settings in the configuration form.

  2. In the Route text area, add the required edits.

Define runtime JAR dependencies

Before you add a new Generic Connector, you need to identify the additional runtime dependencies required during the execution of your Business Process. In Work.AI v10.2.8, the Generic Connector framework uses Apache Camel v3.20.6, and all the dependencies must be compatible with this version.

The Generic Connector already contains the following dependencies out of the box. You do not need to include them in the list.

Out-of-the-box runtime dependencies
[INFO] com.workfusion.connectors:common-generic-connector:jar:1.1.0-dev
[INFO] +- com.google.cloud:google-cloud-bigquery:jar:2.31.1:compile
[INFO] | +- com.google.cloud:google-cloud-core:jar:2.22.0:compile
[INFO] | +- com.google.protobuf:protobuf-java-util:jar:3.23.2:compile
[INFO] | +- com.google.api.grpc:proto-google-common-protos:jar:2.23.0:compile
[INFO] | +- com.google.api.grpc:proto-google-iam-v1:jar:1.18.0:compile
[INFO] | +- com.google.auth:google-auth-library-credentials:jar:1.19.0:compile
[INFO] | +- com.google.cloud:google-cloud-core-http:jar:2.22.0:compile
[INFO] | +- com.google.api-client:google-api-client:jar:2.2.0:compile
[INFO] | +- com.google.oauth-client:google-oauth-client:jar:1.34.1:compile
[INFO] | +- com.google.http-client:google-http-client-apache-v2:jar:1.43.3:compile
[INFO] | +- com.google.http-client:google-http-client-appengine:jar:1.43.3:compile
[INFO] | +- com.google.api:gax-httpjson:jar:2.32.0:compile
[INFO] | +- io.opencensus:opencensus-api:jar:0.31.1:compile
[INFO] | +- io.opencensus:opencensus-contrib-http-util:jar:0.31.1:compile
[INFO] | +- com.google.http-client:google-http-client-gson:jar:1.43.3:compile
[INFO] | +- com.google.http-client:google-http-client:jar:1.43.3:compile
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.5.14:compile
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.4.15:compile
[INFO] | +- com.google.j2objc:j2objc-annotations:jar:2.8:compile
[INFO] | +- org.checkerframework:checker-compat-qual:jar:2.5.5:compile
[INFO] | +- org.checkerframework:checker-qual:jar:3.33.0:compile
[INFO] | +- com.google.auth:google-auth-library-oauth2-http:jar:1.19.0:compile
[INFO] | +- com.google.code.findbugs:jsr305:jar:3.0.2:compile
[INFO] | +- com.google.apis:google-api-services-bigquery:jar:v2-rev20230520-2.0.0:compile
[INFO] | +- com.google.api:api-common:jar:2.15.0:compile
[INFO] | +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
[INFO] | +- com.google.guava:guava:jar:31.1-jre:compile
[INFO] | +- com.google.guava:failureaccess:jar:1.0.1:compile
[INFO] | +- com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
[INFO] | +- com.google.api:gax:jar:2.32.0:compile
[INFO] | +- org.threeten:threetenbp:jar:1.6.8:compile
[INFO] | +- com.google.code.gson:gson:jar:2.9.1:compile
[INFO] | +- org.threeten:threeten-extra:jar:1.7.2:compile
[INFO] | +- com.google.protobuf:protobuf-java:jar:3.23.2:compile
[INFO] | +- com.google.cloud:google-cloud-bigquerystorage:jar:2.41.1:compile
[INFO] | +- io.grpc:grpc-api:jar:1.56.1:compile
[INFO] | +- io.grpc:grpc-context:jar:1.56.1:compile
[INFO] | +- io.grpc:grpc-stub:jar:1.56.1:compile
[INFO] | +- io.grpc:grpc-protobuf:jar:1.56.1:compile
[INFO] | +- io.grpc:grpc-protobuf-lite:jar:1.56.1:compile
[INFO] | +- com.google.auto.value:auto-value:jar:1.10.2:compile
[INFO] | +- com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1:jar:0.165.1:compile
[INFO] | +- com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2:jar:0.165.1:compile
[INFO] | +- com.google.api:gax-grpc:jar:2.32.0:compile
[INFO] | +- io.grpc:grpc-alts:jar:1.56.1:compile
[INFO] | +- io.grpc:grpc-grpclb:jar:1.56.1:compile
[INFO] | +- org.conscrypt:conscrypt-openjdk-uber:jar:2.5.2:compile
[INFO] | +- io.grpc:grpc-auth:jar:1.56.1:compile
[INFO] | +- io.grpc:grpc-netty-shaded:jar:1.56.1:compile
[INFO] | +- io.grpc:grpc-googleapis:jar:1.56.1:runtime
[INFO] | +- io.grpc:grpc-core:jar:1.56.1:compile
[INFO] | +- com.google.android:annotations:jar:4.1.1.4:runtime
[INFO] | +- org.codehaus.mojo:animal-sniffer-annotations:jar:1.23:runtime
[INFO] | +- io.perfmark:perfmark-api:jar:0.26.0:runtime
[INFO] | +- commons-logging:commons-logging:jar:1.2:compile
[INFO] | +- commons-codec:commons-codec:jar:1.15:compile
[INFO] | +- com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1:jar:0.165.1:compile
[INFO] | +- com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2:jar:0.165.1:compile
[INFO] | +- com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1:jar:2.41.1:compile
[INFO] | +- com.google.api.grpc:proto-google-cloud-bigquerystorage-v1:jar:2.41.1:compile
[INFO] | +- org.apache.arrow:arrow-vector:jar:12.0.1:compile
[INFO] | +- org.apache.arrow:arrow-format:jar:12.0.1:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.14.3:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.14.3:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.14.3:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.13.5:compile
[INFO] | +- io.netty:netty-common:jar:4.1.92.Final:compile
[INFO] | +- com.google.flatbuffers:flatbuffers-java:jar:1.12.0:compile
[INFO] | +- org.slf4j:slf4j-api:jar:1.7.36:compile
[INFO] | +- org.apache.arrow:arrow-memory-core:jar:12.0.1:compile
[INFO] | +- org.apache.arrow:arrow-memory-netty:jar:12.0.1:runtime
[INFO] | +- io.netty:netty-buffer:jar:4.1.92.Final:runtime
[INFO] | \- com.google.errorprone:error_prone_annotations:jar:2.18.0:compile
[INFO] +- org.yaml:snakeyaml:jar:2.1:compile
[INFO] +- com.jayway.jsonpath:json-path:jar:2.8.0:compile
[INFO] | \- net.minidev:json-smart:jar:2.4.11:runtime
[INFO] | \- net.minidev:accessors-smart:jar:2.4.11:runtime
[INFO] | \- org.ow2.asm:asm:jar:9.3:runtime
[INFO] +- commons-io:commons-io:jar:2.13.0:compile
[INFO] +- org.apache.commons:commons-text:jar:1.10.0:compile
[INFO] | \- org.apache.commons:commons-lang3:jar:3.12.0:compile
[INFO] +- com.fasterxml.jackson.dataformat:jackson-dataformat-csv:jar:2.13.0:compile
[INFO] +- com.univocity:univocity-parsers:jar:2.9.1:compile
[INFO] +- org.json:json:jar:20230618:compile
[INFO] +- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.15.3:compile
[INFO] | +- org.codehaus.woodstox:stax2-api:jar:4.2.1:compile
[INFO] | \- com.fasterxml.woodstox:woodstox-core:jar:6.5.1:compile
[INFO] +- com.workfusion.connectors:connectors-core:jar:2.1.0:compile
[INFO] | +- com.workfusion.connectors:connectors-core-parent:pom:2.1.0:compile
[INFO] | +- com.workfusion.spa.java.native.worker:module-secrets:jar:1.0.0.28:compile
[INFO] | +- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] | +- com.workfusion:nexus-client:jar:1.0.100:compile
[INFO] | | +- io.github.openfeign:feign-gson:jar:10.2.3:compile
[INFO] | | | \- io.github.openfeign:feign-core:jar:10.2.3:compile
[INFO] | | +- io.github.openfeign:feign-slf4j:jar:10.2.3:compile
[INFO] | | \- io.github.openfeign.form:feign-form:jar:3.3.0:compile
[INFO] | | \- com.google.code.findbugs:annotations:jar:3.0.1:compile
[INFO] | | \- net.jcip:jcip-annotations:jar:1.0:compile
[INFO] | +- org.springframework.retry:spring-retry:jar:1.3.4:compile
[INFO] | +- javax.el:javax.el-api:jar:2.2.5:compile
[INFO] | +- org.eclipse.aether:aether-connector-basic:jar:1.1.0:compile
[INFO] | | +- org.eclipse.aether:aether-api:jar:1.1.0:compile
[INFO] | | +- org.eclipse.aether:aether-spi:jar:1.1.0:compile
[INFO] | | \- org.eclipse.aether:aether-util:jar:1.1.0:compile
[INFO] | +- org.eclipse.aether:aether-transport-http:jar:1.1.0:compile
[INFO] | | \- org.slf4j:jcl-over-slf4j:jar:1.7.36:compile
[INFO] | +- org.apache.maven.resolver:maven-resolver-util:jar:1.9.13:compile
[INFO] | | \- org.apache.maven.resolver:maven-resolver-api:jar:1.9.13:compile
[INFO] | +- org.apache.maven:maven-aether-provider:jar:3.3.9:compile
[INFO] | | +- org.apache.maven:maven-model:jar:3.3.9:compile
[INFO] | | +- org.apache.maven:maven-model-builder:jar:3.3.9:compile
[INFO] | | | +- org.codehaus.plexus:plexus-interpolation:jar:1.21:compile
[INFO] | | | +- org.apache.maven:maven-artifact:jar:3.3.9:compile
[INFO] | | | \- org.apache.maven:maven-builder-support:jar:3.3.9:compile
[INFO] | | +- org.apache.maven:maven-repository-metadata:jar:3.3.9:compile
[INFO] | | +- org.eclipse.aether:aether-impl:jar:1.0.2.v20150114:compile
[INFO] | | +- org.codehaus.plexus:plexus-component-annotations:jar:1.6:compile
[INFO] | | \- org.codehaus.plexus:plexus-utils:jar:3.0.22:compile
[INFO] | +- co.elastic.apm:apm-agent-attach:jar:1.33.0:compile
[INFO] | | +- net.java.dev.jna:jna:jar:5.3.1:compile
[INFO] | | \- net.java.dev.jna:jna-platform:jar:5.3.1:compile
[INFO] | +- co.elastic.apm:apm-agent-api:jar:1.33.0:compile
[INFO] | \- jakarta.validation:jakarta.validation-api:jar:2.0.2:compile
[INFO] +- org.projectlombok:lombok:jar:1.18.28:compile
[INFO] +- org.apache.camel.springboot:camel-spring-boot-starter:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-spring-boot:jar:3.20.6:compile
[INFO] | | +- org.apache.camel:camel-spring:jar:3.20.6:compile
[INFO] | | | +- org.springframework:spring-aop:jar:5.3.27:compile
[INFO] | | | +- org.springframework:spring-beans:jar:5.3.27:compile
[INFO] | | | +- org.springframework:spring-expression:jar:5.3.27:compile
[INFO] | | | \- org.springframework:spring-tx:jar:5.3.27:compile
[INFO] | | +- org.apache.camel:camel-spring-main:jar:3.20.6:compile
[INFO] | | | \- org.apache.camel:camel-main:jar:3.20.6:compile
[INFO] | | | \- org.apache.camel:camel-core-languages:jar:3.20.6:compile
[INFO] | | +- org.apache.camel:camel-util-json:jar:3.20.6:compile
[INFO] | | +- org.apache.camel:camel-xml-jaxb-dsl:jar:3.20.6:compile
[INFO] | | | \- org.apache.camel:camel-xml-jaxb:jar:3.20.6:compile
[INFO] | | | +- com.sun.xml.bind:jaxb-core:jar:2.3.0:compile
[INFO] | | | \- com.sun.xml.bind:jaxb-impl:jar:2.3.3:compile
[INFO] | | | \- com.sun.activation:jakarta.activation:jar:1.2.2:runtime
[INFO] | | +- org.apache.camel:camel-spring-xml:jar:3.20.6:compile
[INFO] | | | \- org.apache.camel:camel-core-xml:jar:3.20.6:compile
[INFO] | | +- org.apache.camel:camel-cloud:jar:3.20.6:compile
[INFO] | | +- org.apache.camel:camel-cluster:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-health:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-core-starter:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-bean-starter:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-browse-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-browse:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-controlbus-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-controlbus:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-dataformat-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-dataformat:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-dataset-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-dataset:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-direct-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-direct:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-directvm-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-directvm:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-file-starter:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-language-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-language:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-log-starter:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-mock-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-mock:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-ref-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-ref:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-rest-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-rest:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-tooling-model:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-saga-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-saga:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-scheduler-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-scheduler:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-seda-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-seda:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-stub-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-stub:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-timer-starter:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-validator-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-validator:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-vm-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-vm:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-xpath-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-xpath:jar:3.20.6:compile
[INFO] | +- org.apache.camel.springboot:camel-xslt-starter:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-xslt:jar:3.20.6:compile
[INFO] | \- org.apache.camel.springboot:camel-xml-jaxp-starter:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-xml-jaxp:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-xml-io-util:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-yaml-dsl:jar:3.20.6:compile
[INFO] | +- org.apache.camel:camel-yaml-dsl-common:jar:3.20.6:compile
[INFO] | | \- org.snakeyaml:snakeyaml-engine:jar:2.3:compile
[INFO] | +- org.apache.camel:camel-yaml-dsl-deserializers:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-dsl-support:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-core-model:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-core-processor:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-timer:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-bean:jar:3.20.6:compile
[INFO] +- org.apache.camel.springboot:camel-http-starter:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-http:jar:3.20.6:compile
[INFO] | +- org.apache.camel:camel-http-common:jar:3.20.6:compile
[INFO] | | +- org.apache.camel:camel-http-base:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-attachments:jar:3.20.6:compile
[INFO] | | \- com.sun.activation:javax.activation:jar:1.2.0:compile
[INFO] | \- javax.servlet:javax.servlet-api:jar:3.1.0:compile
[INFO] +- org.apache.camel:camel-jsonpath:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-file:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-log:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-jackson:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-core-engine:jar:3.20.6:compile
[INFO] | +- org.apache.camel:camel-base-engine:jar:3.20.6:compile
[INFO] | | \- org.apache.camel:camel-base:jar:3.20.6:compile
[INFO] | \- org.apache.camel:camel-core-reifier:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-fastjson:jar:3.20.6:compile
[INFO] | \- com.alibaba:fastjson:jar:1.2.83:compile
[INFO] +- org.apache.camel.springboot:camel-fastjson-starter:jar:3.20.6:compile
[INFO] \- org.apache.camel:camel-support:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-api:jar:3.20.6:compile
[INFO] +- org.apache.camel:camel-management-api:jar:3.20.6:compile
[INFO] \- org.apache.camel:camel-util:jar:3.20.6:compile

To identify additional runtime dependencies required during the Business Process execution, perform the following steps:

  1. Create a Maven project with the following pom.xml file:

    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.workfusion.test</groupId>
    <artifactId>dependency</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dependency</name>
    <properties>
    <camel.springboot.version>3.20.6</camel.springboot.version>
    </properties>
    <dependencies>
    <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-spring-boot-starter</artifactId>
    <version>${camel.springboot.version}</version>
    </dependency>
    <!-- Add dependencies after this -->
    </dependencies>
    </project>
  2. Execute the following Maven command to capture the existing dependency tree:

    mvn dependency:tree -Dscope:runtime
  3. Add the required runtime dependencies for your new Generic Connector component, for example, camel-kafka to pom.xml:

    <!-- Add dependencies after this -->
    <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-kafka</artifactId>
    <version>${camel.springboot.version}</version>
    </dependency>
  4. Execute the Maven command from step 2 to capture the updated dependency tree.

  5. Compare the output and identify the list of dependencies added to the project, ignoring any ordering changes in a particular JAR. Be sure to also eliminate any dependencies that are already available through the out-of-box list of dependencies.

  6. List the dependencies in the group:artifact:version format, one per row. For Apache Kafka, the format resembles the following example:

    "org.apache.camel:camel-kafka:3.20.6",
    "org.apache.kafka:kafka-clients:3.3.2",
    "com.github.luben:zstd-jni:1.5.2-1",
    "org.lz4:lz4-java:1.8.0",
    "org.xerial.snappy:snappy-java:1.1.8.4"

    The above list is then referenced in the task_config entry in the "dependencies" section. For more details, see Define Connector via metadata | task_config.

Add dependencies to Control Tower

After you identifying the runtime JAR dependencies, make them available in your Control Tower instance. To create a dependency bundle, do as follows:

  1. Create a zip file with the following structure. It should include all the previously described dependencies.

    |____component-dependencies-bundle-1.1.0-SNAPSHOT.zip
    | |____meta-info.json
    | |____artifactory-dependency
    | | |____wf-dependencies
    | | | |____org
    | | | | |____lz4
    | | | | | |____lz4-java
    | | | | | | |____1.8.0
    | | | | | | | |____lz4-java-1.8.0.jar
    | | | | |____xerial
    | | | | | |____snappy
    | | | | | | |____snappy-java
    | | | | | | | |____1.1.8.4
    | | | | | | | | |____snappy-java-1.1.8.4.jar
    | | | | |____apache
    | | | | | |____camel
    | | | | | | |____camel-kafka
    | | | | | | | |____3.20.6
    | | | | | | | | |____camel-kafka-3.20.6.jar
    | | | | | |____kafka
    | | | | | | |____kafka-clients
    | | | | | | | |____3.3.2
    | | | | | | | | |____kafka-clients-3.3.2.jar
    | | | |____com
    | | | | |____github
    | | | | | |____luben
    | | | | | | |____zstd-jni
    | | | | | | | |____1.5.2-1
    | | | | | | | | |____zstd-jni-1.5.2-1.jar

    The meta-info.json file should contain the following information:

    {
    "WF_VERSION" : "X.X.X.X",
    "TARGET_VERSION" : "X.X.X",
    "DESCRIPTION" : "component-dependencies-bundle 1.1.0-SNAPSHOT",
    "NAME" : "component-dependencies-bundle",
    "USE_CASE_CODE" : "component-dependencies-bundle",
    "USE_CASE_VERSION" : "1.1.0-SNAPSHOT",
    "INSTANCE" : "your.instance.name",
    "AUTHOR" : "author",
    "PACKAGE_DATE" : "2024-03-15 11:38:54"
    }

    In the example above, sample data is used.

  2. Upload the created zip file to Control Tower > Digital Workers > Upload new. You can upload multiple JARs using a single zip file, or you can create a zip file per each dependency.

Substitute parameters

You can substitute any parameters within any part of the configuration via the ${parameter_name} syntax. To look up the substitution value, do as follows:

  1. Check the data of the previous steps and find a parameter with the matching name. If none is found, move on to step 2.

  2. Check Secrets Vault for an alias that matches the parameter name and get its value. If none is found, move on to step 3.

  3. Check its own configuration or parameter list for a matching parameter.

Getting output

All data processed by the connector step are placed in the Bot Task results and are available for the next step to process as connector_response.