Я не могу получить какой-либо атрибут сущности, если у меня зарегистрирован поставщик контекста.Я постоянно получаю одну и ту же ошибку 409 конфликта.Как я могу предотвратить создание двух объектов с одинаковым идентификатором и объединить их в один?
SETUP
У меня есть весь установочный контекстный брокер Orion, все настройки и работа выполняются после следующих команд:
docker pull mongo:3.6
docker pull fiware/orion:2.0.0
docker network create fiware_default
docker run -d --name=mongo-db --network=fiware_default \
--expose=27017 mongo:3.6 --bind_ip_all --smallfiles
docker run -d --name fiware-orion -h orion --network=fiware_default \
-p 1026:1026 fiware/orion:2.0.0 -dbhost mongo-db
ENTITIES
У меня есть одна сущность Car, добавленная с помощью curl:
curl -iX POST \
'http://localhost:1026/v2/entities' \
-H 'Content-Type: application/json' \
-d '
{
"id": "urn:ngsi-ld:Car:001",
"type": "Car",
"brandName": {
"type": "Property",
"value": "Mercedes"
},
"location": {
"type": "geo:json",
"value": {
"type": "Point",
"coordinates": [0.00, 0.00]
}
},
"name": {
"type": "Text",
"value": "MyCar"
}
}'
Кроме того, я также зарегистрировал своего провайдера контекста:
curl -iX POST \
'http://localhost:1026/v2/registrations' \
-H 'Content-Type: application/json' \
-d '
{
"description": "Temperature",
"dataProvided": {
"entities": [
{
"id": "urn:ngsi-ld:Car:001",
"type": "Car"
}
],
"attrs": [
"temperature"
]
},
"provider": {
"http": {
"url": "http://192.168.xxx.xxx:8080/api/cars/temperature/1"
},
"legacyForwarding": true
}
}'
ПРОВАЙДЕР КОНТЕКСТА
Я выставлен локальномой провайдер контекста (предоставляемый моим приложением SpringBoot, написанным на Java 10) по адресу http://192.168.xxx.xxx:8080/api/cars/temperature/1/queryContext. Данные JSON (возвращаемые в теле html) представлены в формате NSGI v1 и выглядят так:
{
"contextResponses": [
{
"contextElement": {
"attributes": [
{
"name": "temperature",
"type": "float",
"value": "-10"
}
],
"id": "urn:nsgi-ld:Car:001",
"isPattern": "false",
"type": "Car"
},
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
]
}
ПРОБЛЕМА
Когда я делаю этот запрос:
curl GET 'http://localhost:1026/v2/entities?type=Car&options=keyValues'
Я получаю список объектов с одинаковыми идентификаторами:
[{"id":"urn:ngsi-ld:Car:001","type":"Car","brandName":"Mercedes","location":,"name":"MyCar"},{"id":"urn:nsgi-ld:Car:001","type":"Car","temperature":"-10"}]
1) Когда я пытаюсь получитьатрибут местоположения:
curl -iX GET 'http://localhost:1026/v2/entities/urn:ngsi-ld:Car:001/attrs/location/value'
Я получаю ответ:
HTTP/1.1 409 Conflict
Connection: Keep-Alive
Content-Length: 98
Content-Type: application/json
Fiware-Correlator: 509119fa-fd27-11e8-922c-0242ac130003
Date: Tue, 11 Dec 2018 09:29:53 GMT
{
"error": "TooManyResults",
"description": "More than one matching entity. Please refine your query"
}
2) Я заметил, что могу удалить сущность по id:
curl -iX DELETE 'http://localhost:1026/v2/entities/urn:ngsi-ld:Car:001'
3) Изатем я могу получить температуру для несуществующего объекта:
curl -iX GET 'http://localhost:1026/v2/entities/urn:ngsi-ld:Car:001/attrs/temperature/value'
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 5
Content-Type: text/plain
Fiware-Correlator: 0de19b36-fd2a-11e8-8abe-0242ac130003
Date: Tue, 11 Dec 2018 09:49:29 GMT
"-10"
Я хотел бы иметь возможность получить атрибут (местоположение) и атрибут дляm поставщик контекста (температура) для объекта (urn: ngsi-ld: Car: 001), но похоже, что этот объект был каким-то образом разделен на два объекта с одинаковым идентификатором (и одинаковым типом).
Что я должен сделать, чтобы предотвратить этот конфликт идентификаторов?Как предотвратить наличие двух объектов с одинаковым идентификатором при регистрации провайдера контекста?