What steps will reproduce the problem?
1.Create a POJO class with an user defined class's object as instance member
2.Instantiate this pojo object with the member object's value as null
3.Convert this POJO to json string and invoke JsonFormat.merge()
What is the expected output? What do you see instead?
Json string should be properly mapped to its corresponding ProtoBuf object. But
Getting exception
Exception in thread "main" com.googlecode.protobuf.format.JsonFormat$ParseException: 1:16: Expected "{".
at com.googlecode.protobuf.format.JsonFormat$Tokenizer.parseException(JsonFormat.java:765)
at com.googlecode.protobuf.format.JsonFormat$Tokenizer.consume(JsonFormat.java:530)
at com.googlecode.protobuf.format.JsonFormat.handleObject(JsonFormat.java:1128)
at com.googlecode.protobuf.format.JsonFormat.handleValue(JsonFormat.java:1004)
at com.googlecode.protobuf.format.JsonFormat.mergeField(JsonFormat.java:952)
at com.googlecode.protobuf.format.JsonFormat.merge(JsonFormat.java:870)
at com.googlecode.protobuf.format.JsonFormat.merge(JsonFormat.java:818)
at com.ms.JSONToPB.main(JSONToPB.java:48)
What version of the product are you using? On what operating system?
protobuf-java-format - 1.2. OS - Windows 7
Please provide any additional information below.
main function I used
--------------------
public static void main(String[] args)(){
Source sObj = new Source();
sObj.setMemberClass(null);
SourceProto.Source.Builder builder = SourceProto.Source.newBuilder();
ObjectMapper objMapper = new ObjectMapper();
String jsonString = objMapper.writeValueAsString(sObj);
JsonFormat.merge(jsonString, builder);
SourceProto.Source obj = builder.build();
}
Source.class
------------
public class Source{
private MemberClass memberClass;
public MemberClass getMemberClass() {
return memberClass;
}
public void setMemberClass(MemberClass memberClass) {
this.memberClass = memberClass;
}
}
MemberClass.class
------------------
public class MemberClass {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
If we keep null value for primitive type, it is parsed properly. For
non-primitive types, error is thrown
I went through the code and modified the JsonFormat.java at line number : 1123.
I added the following code
if("null".equals(tokenizer.currentToken)){
tokenizer.consume("null");
return null;
}
With this null check, issue is resolved. Please check whether this is the
proper resolution
Original issue reported on code.google.com by baluli...@gmail.com on 14 Jan 2015 at 5:25
Original issue reported on code.google.com by
baluli...@gmail.com
on 14 Jan 2015 at 5:25