Hello, It has been a quite long from Leshan.. got swapped to different tasks in the past few weeks, back to it again
J
While testing a client, I came across this issue ( Julien I think I did mention this issue to you in the testFest Dusseldorf, not sure if you still remember).
I think it’s a bug and it happen in the case of a client response contain OPAQUE Value, see the example below in
RED..
Use Case:
Location object, resource Velocity id “4” type is OPAQUE ..
MESSAGE = {"id":0,"resources":[{"id":0,"value":"test"},{"id":1,"value":"test"},{"id":2,"value":"test"},{"id":4,"value":[39,39]},{"id":5,"value":"1970-01-01T00:00:00Z"}]}
The code failed because of the if condition in
org.eclipse.leshan.standalone.servlet.json.LwM2mNodeDeserializer.java line 75…
}
else
if (object.has("value"))
{
// single value resource
/**
* Don’t you think if the type is Opaque
* It should check if if(object.get("value").isJsonArray())
* In this case it loop through and deserializeValue
*/
node = new
LwM2mResource(id, this.deserializeValue(object.get("value").getAsJsonPrimitive()));
// It’s an array not primitive that’s why the error thrown..
}
else
if (object.has("values"))
{
com.google.gson.JsonSyntaxException:
java.lang.IllegalStateException: This is not a JSON Primitive.
at com.google.gson.Gson.fromJson(Gson.java:815)
at com.google.gson.Gson.fromJson(Gson.java:868)
at com.google.gson.Gson$1.deserialize(Gson.java:126)
at
org.eclipse.leshan.standalone.servlet.json.LwM2mNodeDeserializer.deserialize(LwM2mNodeDeserializer.java:77)
at
org.eclipse.leshan.standalone.servlet.json.LwM2mNodeDeserializer.deserialize(LwM2mNodeDeserializer.java:50)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
Thanks,
Nizar…!