Fix bug 2821 - restconf RPC parsing returns http status 500
authorVaclav Demcak <vdemcak@cisco.com>
Wed, 11 Mar 2015 13:13:22 +0000 (14:13 +0100)
committerTony Tkacik <ttkacik@cisco.com>
Thu, 12 Mar 2015 17:47:52 +0000 (17:47 +0000)
commit80611200d7b4374d32d618b081eabbfa10706a95
treec8c9b1fd69770015412801c5df7c9da0667067be
parentbb3364b46fa34c0de1e65fd9b3c9f85aed48a3f9
Fix bug 2821 - restconf RPC parsing returns http status 500

Note: RpcDefinition is a direct child of SchemaNode and we are not able to
use it as DataSchemaNode or SchemaContext. In next RpcDefinition hasn't any
child except Input & Output ContainerNodes. So we are using RpcDefinition
for SchemaNode as a marker in InstanceIdentfierContext.

* json input read @Provider has to change RpcDefinition SchemaNode
to Input ContainerSchemaNode for a correct parsing RPC input data from stream

* no-payload Rpc - Rpc Call could be without payload, but jersey always does
to parse empty stream to NormalizedNode so we add check for stream.available
before start parsing input NormalizedNode from stream and return NNContext
with null data. All checks for data exist have to be implemented for every
method with NormalizedNodeContext.

* fix RpcOutput NormalzidNodeContext in RestconfImpl - we expect to have
RpcDefinition as reultNodeSchema and data are payloaded inside as Output obj.

* fix NormalizedNodeJsonBodyWriter and NormalizedNodeXmlBodyWriter for RpcDefinition
- RpcDefinition has no child elements so RpcDefinition.output has to be a root
DataSchemaNode for json parser

* add JsonBodyReader/Writer test suite
* add Xml rpc Writer parser test suite

Change-Id: I31273bee937f57fa1551a33fcc4d6c81b984afb6
Signed-off-by: Vaclav Demcak <vdemcak@cisco.com>
23 files changed:
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonNormalizedNodeBodyReader.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/NormalizedNodeJsonBodyWriter.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/NormalizedNodeXmlBodyWriter.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/XmlNormalizedNodeBodyReader.java
opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/md/sal/rest/common/TestRestconfUtils.java
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/AbstractBodyReaderTest.java
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReader.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyReaderMountPoint.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestJsonBodyWriter.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReader.java
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyReaderMountPoint.java
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/rest/impl/test/providers/TestXmlBodyWriter.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/URITest.java
opendaylight/md-sal/sal-rest-connector/src/test/resources/full-versions/test-module/test-module.yang
opendaylight/md-sal/sal-rest-connector/src/test/resources/instanceidentifier/json/json_sub_container.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/invoke-rpc/invoke-rpc-module.yang
opendaylight/md-sal/sal-rest-connector/src/test/resources/invoke-rpc/json/rpc-input.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/invoke-rpc/json/rpc-output.json [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/invoke-rpc/xml/rpc-output.xml [new file with mode: 0644]