1. Home
  2. Docs
  3. Infrastructure
  4. Camunda BPM Platform &#03...
  5. HTTP Connector (Camunda Connect Plugin)

HTTP Connector (Camunda Connect Plugin)

Install Camunda Connect Plugin

Important: In addition to HTTP Connector, the Camunda Connect plugin must also be installed and enabled.

If you get this error:

org.camunda.bpm.engine.ProcessEngineException: ENGINE-09005 Could not parse BPMN process. Errors: One of the attributes ‘class’, ‘delegateExpression’, ‘type’, or ‘expression’ is mandatory on serviceTask. | invokeRestService.bpmn | line 7 | column 75

That’s indeed a badly misleading error message (CAM-4292). To solve it, you need to install the plugin, e.g. in your Spring Boot project’s pom.xml:

<dependency>
    <groupId>org.camunda.bpm</groupId>
    <artifactId>camunda-engine-plugin-connect</artifactId>
</dependency>

Connector’s Input Parameters

Note: Use Connector’s input parameters, not the service task’s input parameters.

  1. url: String. The URL.
  2. method: String. GET / POST / PUT / PATCH / DELETE.
  3. headers: Map<String, String>

Getting HTTP Response into Connector’s Output Parameters

Note: Use Connector’s output parameters, not the service task’s output parameters.

If you’re sure the response body is less than 4000 characters, you can use:

  • Process variable name: response
  • Variable assignment type: String
  • Variable assignment value: ${response}

Camunda cannot save string variables larger than 4000 variables, it will throw JDBC error. As alternative, you can either save it as Object/BLOB (see below), or truncate it (reference). To truncate it:

  • Variable assignment type: Script
  • Script Format: javascript
  • Script Type: Inline Script
  • Script: connector.getVariable("response").substring(0, 4000)

Note: It’s possible to use Java, but it is not friendly (see below). So that’s why Hendy recommends using JavaScript instead.

  • Variable assignment value: ${response.length() > 4000 ? response.substring(0, 4000) : response}

How to save Camunda BPM process variable as Object/BLOB?

If the original variable is a freeform string, you can convert it to bytes:

  • ${response.getBytes("UTF8")}

Alternatively, if the original variable is formatted as XML or JSON, then you can convert that to XML or JSON.

Using Java-based expression, with Spin:

  • ${JSON(response)}
  • ${XML(response)}

If using (inline) JavaScript, you have two choices:

  • S(response) -> You get Java-style Spin in your JavaScript code
  • JSON.parse(response) -> You get native JavaScript object, which Hendy thinks gets converted to Java Map if you return it as process variable

How can we help?

Leave a Reply

Your email address will not be published. Required fields are marked *