jpsstack
jpsstack

Reputation: 1291

Error trying invoke business network. missing required field

I want to send a POST request from Node-RED to the Composer REST server.

Error trying invoke business network. Error: No valid responses from any peers.Response from attempted peer comms was an error: Error: 2 UNKNOWN: error executing chaincode: transaction returned with failure: ValidationException: Instance org.acme.shipping.perishable.AccelReading#c8c829bfd738d7ec63180c5225ae85bd77fad29b4ad9d8ad4bc40a14362f1060 missing required field accel_x

Playground/Test

{
  "$class": "org.acme.shipping.perishable.AccelReading",
  "accel_x": 0,
  "accel_y": 0,
  "accel_z": 0,
  "latitude": "",
  "longitude": "",
  "readingTime": "",
  "shipment": "resource:org.acme.shipping.perishable.Shipment#4879"
}

Node-RED URL

http://...:31090/api/AccelReading?data=
{"$class":"org.acme.shipping.perishable.AccelReading",
"accel_x":23264,
"accel_y":-20960,
"accel_z":-2448,
"readingTime":"2018-02-14T15:16:44.284Z",
"latitude":"51",
"longitude":"11",
"shipment":"resource:org.acme.shipping.perishable.Shipment#320022000251363131363432"
}

Payload enter image description here

Postman POST request with all parameters defined as key/value pairs in the body

enter image description here

Response

{
    "error": {
        "statusCode": 422,
        "name": "ValidationError",
        "message": "The `AccelReading` instance is not valid. Details: `shipment` can't be blank (value: undefined).",
        "details": {
            "context": "AccelReading",
            "codes": {
                "shipment": [
                    "presence"
                ]
            },
            "messages": {
                "shipment": [
                    "can't be blank"
                ]
            }
        },
        "stack": "ValidationError: The `AccelReading` instance is not valid. Details: `shipment` can't be blank (value: undefined).\n    at /home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/dao.js:398:12\n    at AccelReading.<anonymous> (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/validations.js:578:11)\n    at AccelReading.next (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/hooks.js:93:12)\n    at AccelReading.<anonymous> (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/validations.js:575:23)\n    at AccelReading.trigger (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/hooks.js:83:12)\n    at AccelReading.Validatable.isValid (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/validations.js:541:8)\n    at /home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/dao.js:394:9\n    at doNotify (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at doNotify (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at doNotify (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at doNotify (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:155:49)\n    at Function.ObserverMixin._notifyBaseObservers (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:178:5)\n    at Function.ObserverMixin.notifyObserversOf (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n    at Function.ObserverMixin._notifyBaseObservers (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)\n    at Function.ObserverMixin.notifyObserversOf (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:153:8)\n    at Function.ObserverMixin._notifyBaseObservers (/home/composer/.npm-global/lib/node_modules/@ibmblockchain/composer-rest-server/node_modules/loopback-datasource-juggler/lib/observer.js:176:15)"
    }
}

Postman/JSON

enter image description here

Upvotes: 0

Views: 249

Answers (1)

Paul O&#39;Mahony
Paul O&#39;Mahony

Reputation: 6740

The issue was a refresh of Composer REST server was required, to reflect the desired fields appearing in Swagger. This means to delete the REST server container and re-create using the internal 192.x address - the steps in Kubernetes are:

bx cs cluster-config blockchain
export KUBECONFIG=/Users/<name>/.bluemix/plugins/container-service/clusters/blockchain/kube-config-mil01-blockchain.yml
./delete/delete_composer-rest-server.sh
./create/create_composer-rest-server.sh --business-network-card admin@perishable-network

Attaching a screenshot of what the POST should look like (after refresh) for the IoT business network referred to enter image description here

Upvotes: 1

Related Questions