ConnectorInputException: Cannot construct instance of LinkedHashMap when using OpenAI Compatible provider (Ollama) with IDP — IDP_OPENAI_COMPATIBLE_HEADERS secret deserialization failure

Environment:

  • Camunda 8 Self-Managed

  • Web Modeler IDP (Intelligent Document Processing)

  • OpenAI Compatible provider: Ollama (gpt-oss:20b)

Description:

When attempting to validate an IDP extraction project using an OpenAI Compatible provider (Ollama), the following error is thrown during the Validate extraction step (Step 3):

"type":"io.camunda.connector.api.error.ConnectorInputException", "message":"Cannot construct instance of `java.util.LinkedHashMap` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('***')"

Full stack trace reference:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `java.util.LinkedHashMap` ... no String-argument constructor/factory method to deserialize from String value ('{}') at ... io.camunda.connector.idp.extraction.model.ExtractionRequest["baseRequest"] ->io.camunda.connector.idp.extraction.model.providers.OpenAiProvider["openAiHeaders"]

Steps to reproduce:

  1. Configure IDP with an OpenAI Compatible provider (Ollama).

  2. Add connector secrets IDP_OPENAI_COMPATIBLE_ENDPOINT and IDP_OPENAI_COMPATIBLE_HEADERS(value: {}).

  3. Attempt to validate the extraction project (Step 3).

Expected behaviour: The connector resolves the headers secret and proceeds with validation.

Actual behaviour: The connector receives the secret as a plain string (e.g., {}) rather than a deserialized JSON map, causing a Jackson MismatchedInputException on the openAiHeaders field.

Root cause hypothesis: The connector runtime replaces {{secrets.*}} placeholders with their raw string values. However, the openAiHeaders field in OpenAiProvider appears to expect a Map<String, String> (JSON object), not a String. This creates a type mismatch during deserialization.

Question: Is this a bug in the IDP connector’s handling of the IDP_OPENAI_COMPATIBLE_HEADERS secret? Is there a supported way to pass the headers value as a JSON map rather than a plain string in this context?

possibly related code: connectors/connectors/idp-extraction/src/main/java/io/camunda/connector/idp/extraction/model/providers/OpenAiProvider.java at 724cf193f5ad3a1fa2a5d1c86c2c3815f9f689c7 · camunda/connectors · GitHub