Как преобразовать ManagedCursorStreamProvider в объект JSOn в mule 4

Как преобразовать ManagedCursorStreamProvider в объект Json в mule. Я написал java-метод, который принимает объект Json в качестве входных данных.

Request Payload:
{ a: "one",
b : "two"}

Вызвать статический

arg0 : payload

Функция Java вызывается с использованием invoke static

public static func(JsonObject json){
}

Я получаю следующую ошибку:

Ожидаемые аргументы: [com.google.gson.JsonObject jsonObject], и была предпринята попытка вызова с аргументами [org.mule.runtime.core.internal.streaming.bytes.ManagedCursorStreamProvider arg0]. Не найдено подходящего преобразования, соответствующего ожидаемому типу параметра [jsonObject].

ОБНОВЛЕНИЕ: я обновил свой java-метод, чтобы он принимал String в качестве входных данных.

"Cannot coerce Object { encoding: UTF-8, mediaType: application/json; charset=UTF-8, mimeType: application/json, raw: org.mule.weave.v2.el.SeekableCursorStream@868075a } (org.mule.weave.v2.el.MuleTypedValue@7c0c5e89) to String

1| arg0 : vars.req as String
          ^^^^^^^^^^^^^^^^^^
Trace:
  at main (line: 1, column: 8)" evaluating expression: "arg0 : vars.req as String".

person HMT    schedule 08.04.2020    source источник
comment
Почему вы используете GSON и Java вместо обработки этой полезной нагрузки с помощью DataWeave?   -  person afelisatti    schedule 08.04.2020
comment
@afelisatti Спасибо за ответ. Я хочу зашифровать полезную нагрузку запроса. Я написал логику шифрования на Java.   -  person HMT    schedule 08.04.2020
comment
Я бы не стал использовать String, InputStream больше похож на него. В частности, если данные поступают из HTTP-операции. Одна вещь, которую вы также можете попробовать, если у вас есть статический метод в Java, - это вызвать его напрямую через DataWeave.   -  person afelisatti    schedule 09.04.2020


Ответы (1)


Мул не знает, как преобразовать в GSON JsonObject. Вы можете использовать DataWeave, чтобы преобразовать его в карту Java. В качестве альтернативы вы можете изменить аргумент метода Java на String, и Mule прозрачно преобразует поток в String. Обязательно используйте последнюю версию модуля Java.

Если вы хотите преобразовать объект в объект нестандартного типа, вам нужно будет реализовать его на Java самостоятельно.

person aled    schedule 08.04.2020
comment
Спасибо за ответ. Я хочу зашифровать полезную нагрузку запроса. Я написал логику шифрования на Java, но позвольте мне попробовать передать ее как String. - person HMT; 08.04.2020
comment
Пожалуйста, просмотрите обновленную часть моего вопроса - person HMT; 08.04.2020
comment
Произошла ли ошибка при использовании последней версии модуля Java? В более ранних версиях была ошибка, приводившая к неправильной сериализации в строки. - person aled; 08.04.2020
comment
Да, это последняя версия java - person HMT; 08.04.2020
comment
Извините, я просто хочу подтвердить, что версия Java-модуля в приложении является последней. В настоящее время используется версия 1.2.5 (docs.mulesoft.com/release-notes/ коннектор / java-модуль). Чтобы быть уверенным, что мы находимся на одной странице, я не говорю о версии Java JDK, используемой для выполнения среды выполнения Mule. - person aled; 08.04.2020
comment
Я использую версию 1.2.6. - person HMT; 09.04.2020