Ошибка конфликта при получении атрибутов в FIWARE Orion Context Broker - PullRequest
0 голосов
/ 10 декабря 2018

Я не могу получить какой-либо атрибут сущности, если у меня зарегистрирован поставщик контекста.Я постоянно получаю одну и ту же ошибку 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), но похоже, что этот объект был каким-то образом разделен на два объекта с одинаковым идентификатором (и одинаковым типом).

Что я должен сделать, чтобы предотвратить этот конфликт идентификаторов?Как предотвратить наличие двух объектов с одинаковым идентификатором при регистрации провайдера контекста?

...