Это мой первый вопрос здесь, поэтому, если в моем вопросе отсутствует какая-либо основная информация, пожалуйста, потерпите меня. Я постараюсь добавить необходимую информацию как можно быстрее. Я устанавливаю верблюжий маршрут, который получает URL-адрес из моей базы данных и отправляет этот URL сканеру, который собирает некоторые данные о продукте. Данные, полученные от сканера, затем сохраняются обратно в базу данных в другую коллекцию. Когда я сканирую другой URL, который содержит тот же продукт, я хочу добавить вновь полученные данные к объекту в моей базе данных.
Я попытался сохранить вновь полученные данные в свойстве, а затем установить две константы внайти соответствующий пункт в базе данных. После того, как объект найден, я хочу отправить полученные данные на свой процессор, где я добавляю новые данные в извлеченный объект и затем сохраняю их обратно в БД.
from("direct:myRoute")
...
.setProperty("newItem").simple("${body}")
.setBody().constant("{ 'name': $.name}")
.setBody().constant("{ 'brand': $.brand}")
.to("mongodb:mongoBean?database={{db}}&collection=
{{col}}&operation=findOneByQuery")
...
Ожидаемый результат должен быть, что в моем объекте базы данных хранится старая информация и вновь полученная информация, но я получаю следующее: { 'name': $.name}
недействительно BasicDBObject
, то же самое для бренда.
Обновление
Итак, я обнаружил, что установка двух констант невозможна для того, чего я хотел достичь. Я немного поэкспериментировал и смог заставить его работать с жестко закодированными примерами.
from("direct:myRoute")
...
.setProperty("newItem").simple("${body}")
.setBody().constant("{ 'name': 'product', 'brand': 'manufacturer'}")
.to("mongodb:mongoBean?database={{db}}&collection=
{{col}}&operation=findOneByQuery")
...
Но проблема остается в том, что я хочу установить «имя» и «бренд» как переменные json, извлеченные из тела.
Обновление 2
Я немного изменил код и попробовал следующий пример в моем коде.
from("direct:myRoute")
...
.setProperty("newItem").simple("${body}")
.setBody().constant("{ 'name' : '{$.name}', 'brand' : '{$.brand}' }")
.to("mongodb:mongoBean?database={{db}}&collection=
{{col}}&operation=findOneByQuery")
...
Я неполучить ошибку от этого, но она не работает, как ожидалось. Я надеялся, что $ .name и $ .brand будут заменены переменными, хранящимися в теле, но, похоже, они привыкнут «как есть»
2019-11-06 13: 27: 43.363 INFO 2132 --- [XNIO-1 task-1] ОТЛАДКА: Exchange [ExchangePattern: InOut, BodyType: String, Body: {'name': '{$ .name}', 'brand': '{$ .brand} '}]