передать JSON в переменных процесса в процессе Camunda - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь передать полезную нагрузку json в переменных в качестве значения, чтобы запустить определение процесса с использованием API-интерфейса engine-rest, как показано ниже: -

API:

http://localhost:8080/engine-rest/process-definition/processService:1:9459dbe9-6b2c-11e8-b9e8-28d2447c697a/start

Тело:

{
  "variables": {
      "payload": {
        "value": {
            "mode": "email",
            "meta": [{
                "key": "topic",
                "value": "weather"
            }, {
                "key": "qos",
                "value": "2"
            }]
        },
        "type": "Json"
      }
  }
}

, но оно дает 400 BAD REQUEST со следующей ошибкой: - Должно предоставить значение 'null' или String для значения типа SerializableValue 'Json'.

Также у меня естьЯ использовал выражение в моем BPMN-процессе, чтобы получить пару ключ-значение, как показано ниже, оно также выдало мне ошибку: -

$ {S (payload) .prop ("mode"). stringValue ()== 'email'}

Теперь рабочие шаги: - когда я пытаюсь отправить полезную нагрузку json для тела в строковом формате, он работает нормально.

API:

http://localhost:8080/engine-rest/process-definition/processService:1:9459dbe9-6b2c-11e8-b9e8-28d2447c697a/start

Body:

{
  "variables": {
      "payload": {
        "value": "{\"mode\": \"email\",\"meta\": [{\"key\": \"topic\",\"value\": \"weather\"},{\"key\": \"qos\",\"value\": \"2\"}]}",
        "type": "String"
      }
  }
}

тот же Java-код, который я использую здесь для получения полезной нагрузки json-

public void notify(DelegateExecution delegateProcessExecution) throws Exception {
   Object notificationPayload =
       delegateProcessExecution.getVariable("payload");

    if (null != notificationPayload) {
        String notifyPayload = notificationPayload.toString();  
        JSONObject inputJson = new JSONObject(notifyPayload);
    }
    // ...
}

Так что я хочу эту полезную нагрузку как json для всегопроцесс, так что мне не нужно преобразовывать его в строку, как в приведенном выше рабочем примере.

1 Ответ

0 голосов
/ 23 декабря 2018

Это явно недостаток в движке отдыха до V7.10.0, я создал проблему Jira для этого: https://app.camunda.com/jira/browse/CAM-9617.

Обходной путь должен передать в качестве значения экранированную строку JSON, так как выуказал выше.Можно также использовать "type": "Object", если у движка есть Java Jack Bean Джексона на пути к классам, который соответствует данному значению.Вы указываете имя типа компонента в объекте valueInfo:

https://docs.camunda.org/manual/7.10/reference/rest/process-definition/post-start-process-instance/#request-body

Например:

{
  "variables": {
      "payload": {
        "value": "{\"mode\": \"email\",\"meta\": [{\"key\": \"topic\",\"value\": \"weather\"},{\"key\": \"qos\",\"value\": \"2\"}]}",
        "type": "String",
        "valueInfo": {
            "objectTypeName": "my.own.BeanWithModeAndMetaProps",
            "serializationDataFormat": "application/json"
            }
      }
  }
}
...