...
Updating all data trees under an anchor with root node xPath "/"
CURL request to update all data trees
Code Block curl --location --request PATCH 'http://localhost:8080/cps/api/v1/dataspaces/testDataspace/anchors/sample/nodes?xpath=%2F' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic Y3BzdXNlcjpjcHNyMGNrcyE=' --header 'Cookie: JSESSIONID=node0iyclt1syzfqj28jzo5qc5gks1.node0' \ --data '{ "multiple-data-tree:interface-A": { "host-name": "host-A", "interface": [ { "name": "Interface-A", "address": "10.10.10.100", //Updated Value "subnet-mask": "255.255.255.25", //Updated Value "enabled": false } ], "domain": "true" }, "multiple-data-tree:interface-B": { "interface": [ { "name": "Interface-B", "address": "10.10.10.100", //Updated Value "subnet-mask": "255.255.255.0" } ] } }'
Response: 500 Server Error
Code Block { "status": "500 INTERNAL_SERVER_ERROR", "message": "could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement", "details": "Check logs for details." }
On performing Get operation we get the following JSON dataCode Block [ { "int:interface-A": { "domain": "false", "host-name": "host", "interface": [ { "name": "Interface-A", "address": "10.10.10.1", "enabled": false, "subnet-mask": "255.255.255.0" } ] } }, { "int:interface-B": { "interface": [ { "name": "Interface-B", "address": "10.10.10.1", "subnet-mask": "255.255.255.0" } ] } } ]
Updating the first data tree
CURL request to update first data treeCode Block curl --location --request PATCH 'http://localhost:8080/cps/api/v1/dataspaces/testDataspace/anchors/sample/nodes?xpath=%2Finterface-A' \ --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic Y3BzdXNlcjpjcHNyMGNrcyE=' --header 'Cookie: JSESSIONID=node0iyclt1syzfqj28jzo5qc5gks1.node0' \ --data '{ "int:interface": { "name": "Interface-A", "address": "10.10.10.200", "enabled": true, "subnet-mask": "255.255.255.0" } }'
Response 200 OK
Updated data after making get requestCode Block [ { "int:interface-A": { "domain": "false", "host-name": "host", "interface": [ { "name": "Interface-A", "address": "10.10.10.200", "enabled": true, "subnet-mask": "255.255.255.0" } ] } } ]
Updating the second data tree
CURL request to update second data treeCode Block curl --location --request PATCH 'http://localhost:8080/cps/api/v1/dataspaces/testDataspace/anchors/sample/nodes?xpath=%2Finterface-B' \ --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic Y3BzdXNlcjpjcHNyMGNrcyE=' --header 'Cookie: JSESSIONID=node0iyclt1syzfqj28jzo5qc5gks1.node0' \ --data '{ "int:interface": { "name": "Interface-B", "address": "10.10.10.200", "subnet-mask": "255.255.255.10" } }'
Response 200 OK
Updated data after making get requestCode Block [ { "int:interface-B": { "interface": [ { "name": "Interface-B", "address": "10.10.10.200", "subnet-mask": "255.255.255.10" } ] } } ]
Inconsistencies with Patch Operation
When updating multiple data trees with only leaf nodes
Assuming the following data is in the data base, having one leaf node in each data tree
Code Block |
---|
{
"first-container": {
"a-leaf": "a-value"
},
"last-container": {
"x-leaf": "x-value"
}
} |
An update operation is performed on both data trees as follows:
Code Block |
---|
curl --location --request PATCH 'http://localhost:8080/cps/api/v1/dataspaces/testDataspace/anchors/multipleDataTree/nodes?xpath=%2F' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic Y3BzdXNlcjpjcHNyMGNrcyE=' --header 'Cookie: JSESSIONID=node0kglnliqz1tzc1g0x6opgrphei0.node0' \
--data '{
"first-container": {
"a-leaf": "a-new-value"
},
"last-container": {
"x-leaf": "x-new-value"
}
}' |
On performing a get operation, it is noticed that only first data tree gets updated
Code Block |
---|
[
{
"multiple-data-tree:last-container": {
"x-leaf": "x-new-value"
}
},
{
"multiple-data-tree:first-container": {
"a-leaf": "a-value"
}
}
] |
When updating list node with xpath set as root node xpath "/", returns Status 200 but data is not updated
Assuming the following data is in the databse
Code Block |
---|
{
"int:interface-A": {
"domain": "false",
"host-name": "host",
"interface": [
{
"name": "Interface-A",
"address": "10.10.10.200",
"enabled": true,
"subnet-mask": "255.255.255.0"
}
]
}
} |
When performing update operation with xPath set as root
Code Block |
---|
curl --location --request PATCH 'http://localhost:8080/cps/api/v1/dataspaces/testDataspace/anchors/sample/nodes?xpath=%2F' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic Y3BzdXNlcjpjcHNyMGNrcyE=' --header 'Cookie: JSESSIONID=node01ejoiyh1brii5zx8z9mk2r39l1.node0' \
--data '{
"int:interface-A": {
"domain": "false",
"host-name": "New-Host", //updated value
"interface": [
{
"name": "Interface-A",
"address": "10.10.10.0", //updated value
"enabled": false, //updated value
"subnet-mask": "255.255.255.0"
}
]
}
}' |
Status 200 OK is returned, but on performing the Get operation it is noticed only the leaf nodes get updated and list node remains as it is.
Code Block |
---|
{
"int:interface-A": {
"domain": "false",
"host-name": "New-Host",
"interface": [
{
"name": "Interface-A",
"address": "10.10.10.200",
"enabled": true,
"subnet-mask": "255.255.255.0"
}
]
}
} |