2

エンティティがタイプで作成され、次に同じ ID で空のタイプのエンティティが作成されると、contextbroker は正常に応答しますが、エンティティは作成されません。

ただし、作成が逆の順序で行われた場合、最初に空の ID を持つエンティティが作成され、次に aa タイプのエンティティが作成された場合、Context Broker は ok として応答し、エンティティが一覧表示されます。

ケース1を実行するスクリプト

#/bin/bash
HOST=localhost
SERVICE=Service123
SUBSERVICE=/Subservice123
#Create an entity with id and type
CREATE=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
    -d '
        {
          "id": "firstID",
          "type": "firstType",
          "attributes": []
        }')
#List the entities
LIST=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X GET \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
)
echo $CREATE
echo "**********************"
echo $LIST
#Create an entity with the same ID but different type
CREATE=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
    -d '
        {
          "id": "firstID",
          "type": "",
          "attributes": []
        }')
#List the entityies
LIST=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X GET \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
)
echo
echo "Second Iteration"
echo
echo $CREATE
echo "**********************"
echo $LIST

ケース2を実行するスクリプト

#/bin/bash
HOST=localhost
SERVICE=Service1234
SUBSERVICE=/Subservice1234
#Create an entity with id and type
CREATE=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
    -d '
        {
          "id": "firstID",
          "type": "",
          "attributes": []
        }')
#List the entities
LIST=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X GET \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
)
echo $CREATE
echo "**********************"
echo $LIST
#Create an entity with the same ID but different type
CREATE=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
    -d '
        {
          "id": "firstID",
          "type": "fistType",
          "attributes": []
        }')
#List the entityies
LIST=$(\
curl http://$HOST:1026/v1/contextEntities \
    -s \
    -X GET \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "Fiware-Service: $SERVICE" \
    -H "Fiware-ServicePath: $SUBSERVICE" \
)
echo
echo "Second Iteration"
echo
echo $CREATE
echo "**********************"
echo $LIST
4

1 に答える 1

0

奇妙に思えるかもしれませんが、スクリプト 1 は CB 定義の機能に従って適切に動作しています。2 番目の POST の type = "" の意味は、「id firstID を持ち、type を持たないエンティティ」ではなく、「タイプに関係なく、id firstID を持つ任意のエンティティ」につながります ( Context Broker のマニュアルを参照してください)。したがって、「タイプに関係なく ID firstID を持つ任意のエンティティ」(つまり、最初の POST で ID firstID とタイプ firstType で作成されたエンティティ) に一致するエンティティが既に 1 つある場合、リクエストは作成として解釈されませんが、次のように解釈されます。更新 (Orion ユーザー マニュアルから: 「エンティティが既に存在する場合、現在の Orion Context Broker バージョンは APPEND [その URL の POST は APPEND updateContext に等しい] を UPDATE として解釈します」)。

!exists フィルタを使用して、「タイプのないエンティティ」を意味する方法があります。script1 の次の 35 行目を変更すると、

curl http://$HOST:1026/v1/contextEntities \

これのために

curl http://$HOST:1026/v1/contextEntities?!exist=entity::type \

最後に 2 つのエンティティが作成されます (1 つはタイプあり、もう 1 つはタイプなし)。

于 2015-01-16T12:16:12.867 に答える