[
https://issues.apache.org/jira/browse/HBASE-2475?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12859094#action_12859094
]
Andrew Purtell commented on HBASE-2475:
---------------------------------------
Thanks for the report, very helpful.
bq. In the equivalent XML notation, the ordering is specifically required per
the schema.
... and Jersey adds a marshaller and unmarshaller to the JAXB framework to
produce JSON. This is an artifact of jersey-json or something dumb we did when
hooking up JAXB. I'll write up some unit tests and look at this soon.
> [stargate] Required ordering of JSON name/value pairs when performing
> Insert/Update
> -----------------------------------------------------------------------------------
>
> Key: HBASE-2475
> URL: https://issues.apache.org/jira/browse/HBASE-2475
> Project: Hadoop HBase
> Issue Type: Bug
> Reporter: Andrew Purtell
> Assignee: Andrew Purtell
> Fix For: 0.20.5, 0.21.0
>
>
> From Tyler Coffin up on hbase-user@
> {quote}
> I am using the Stargate REST interface to HBase for inserting data. When
> using JSON to transmit the query content, I have found that specific ordering
> of key/value pairs within the JSON string is required in order for the query
> to succeed (otherwise a response of 'HTTP/1.1 500 Row key is invalid' error
> is thrown if "key" and "Cell" are reversed).
> Example:
> This string receives the above error:
> {noformat}
> {"Row":[{"Cell":[{"column":"bWVzc2FnZTptc2c=","$":"Zm9vYmFy"}],"key":"MTIzNAo="}]}
> {noformat}
> This is the valid equivalent string:
> {noformat}
> {"Row":[{"key":"MTIzNAo=","Cell":[{"column":"bWVzc2FnZTptc2c=","$":"Zm9vYmFy"}]}]}
> {noformat}
> As you can see the only difference between these two instances is that the
> "key" and "Cell" name/value pairs have their order reversed.
> In the equivalent XML notation, the ordering is specifically required per the
> schema. However with JSON Objects (i.e. name/value pairs) order is not
> required (JSON Arrays are ordered, but not Objects). Some JSON libraries will
> preserve ordering of Objects but not all which is how I discovered this
> problem in the first place because I was using the Perl JSON library which
> does not guarantee order).
> I'm unsure if this is a bug in the REST implementation or an inconvenient
> ambiguity in the JSON specification. Regardless I thought I'd share this
> discovery with the community for feedback (or at the very least to document
> this for users' future reference).
> For reference this is the table schema for the above query:
> {noformat}
> {NAME => 'reftrack', FAMILIES => [{NAME => 'message', COMPRESSION =>
> 'NONE', VERSIONS => '1', TTL => '2147483647', BLOCKSIZE => '65536',
> IN_MEMORY => 'false', BLOCKCACHE => 'true'}]}
> {noformat}
> {quote}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.