[JBoss JIRA] (IPROTO-120) Null collection fields always unmarshalled as empty collection implementation
by Ryan Emerson (Jira)
[ https://issues.jboss.org/browse/IPROTO-120?page=com.atlassian.jira.plugin... ]
Ryan Emerson commented on IPROTO-120:
-------------------------------------
A null and an empty collection are very different though and they can impact the result of semantic checks applied to a marshalled/unmarshalled object.
The reason I discovered this bug/feature was that it was causing DSL Query tests to fail when converting from Serializable to Protostream marshalled Pojos, see [here|https://github.com/infinispan/infinispan/blob/f5964d943635432f4c3752...].
> Null collection fields always unmarshalled as empty collection implementation
> -----------------------------------------------------------------------------
>
> Key: IPROTO-120
> URL: https://issues.jboss.org/browse/IPROTO-120
> Project: Infinispan ProtoStream
> Issue Type: Bug
> Reporter: Ryan Emerson
> Assignee: Nistor Adrian
> Priority: Major
>
> The following Pojo always returns an empty collection after being unmarshalled, regardless of whether {{stringList}} was null or empty when marshalled.
> {code:java}
> public class SomePojo {
> @ProtoField(number = 1, collectionImplementation = ArrayList.class)
> final List<String> stringList;
> @ProtoFactory
> public SomePojo(List<String> stringList) {
> this.stringList = stringList;
> }
> }
> {code}
> This is because the generated marshaller always creates the collection instance before attempting to read the collection content:
> {code:java}
> java.util.ArrayList __c$1 = new java.util.ArrayList();
> boolean done = false;
> while (!done) {
> final int tag = $2.readTag();
> switch (tag) {
> case 0:
> done = true;
> break;
> case 10: {
> java.lang.String __v$1 = $2.readString();
> __c$1.add(__v$1);
> break;
> }
> default: {
> if (!$2.skipField(tag)) done = true;
> }
> }
> }
>
> return new org.infinispan.query.dsl.embedded.testdomain.hsearch.SomePojo(__c$1);
> {code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
6 years, 6 months
[JBoss JIRA] (IPROTO-120) Null collection fields always unmarshalled as empty collection implementation
by Nistor Adrian (Jira)
[ https://issues.jboss.org/browse/IPROTO-120?page=com.atlassian.jira.plugin... ]
Nistor Adrian commented on IPROTO-120:
--------------------------------------
That's not a mistake. It is intentional. It was not like that from the beginning. Somebody created a jira for that, pointing out we're not doing as protobuf-java does.
Which is not a good argument. Defaults,nulls, and empty are all very weird in protobuf-java, IMHO.
> Null collection fields always unmarshalled as empty collection implementation
> -----------------------------------------------------------------------------
>
> Key: IPROTO-120
> URL: https://issues.jboss.org/browse/IPROTO-120
> Project: Infinispan ProtoStream
> Issue Type: Bug
> Reporter: Ryan Emerson
> Assignee: Nistor Adrian
> Priority: Major
>
> The following Pojo always returns an empty collection after being unmarshalled, regardless of whether {{stringList}} was null or empty when marshalled.
> {code:java}
> public class SomePojo {
> @ProtoField(number = 1, collectionImplementation = ArrayList.class)
> final List<String> stringList;
> @ProtoFactory
> public SomePojo(List<String> stringList) {
> this.stringList = stringList;
> }
> }
> {code}
> This is because the generated marshaller always creates the collection instance before attempting to read the collection content:
> {code:java}
> java.util.ArrayList __c$1 = new java.util.ArrayList();
> boolean done = false;
> while (!done) {
> final int tag = $2.readTag();
> switch (tag) {
> case 0:
> done = true;
> break;
> case 10: {
> java.lang.String __v$1 = $2.readString();
> __c$1.add(__v$1);
> break;
> }
> default: {
> if (!$2.skipField(tag)) done = true;
> }
> }
> }
>
> return new org.infinispan.query.dsl.embedded.testdomain.hsearch.SomePojo(__c$1);
> {code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
6 years, 6 months
[JBoss JIRA] (IPROTO-120) Null collection fields always unmarshalled as empty collection implementation
by Ryan Emerson (Jira)
[ https://issues.jboss.org/browse/IPROTO-120?page=com.atlassian.jira.plugin... ]
Ryan Emerson reassigned IPROTO-120:
-----------------------------------
Assignee: Nistor Adrian
> Null collection fields always unmarshalled as empty collection implementation
> -----------------------------------------------------------------------------
>
> Key: IPROTO-120
> URL: https://issues.jboss.org/browse/IPROTO-120
> Project: Infinispan ProtoStream
> Issue Type: Bug
> Reporter: Ryan Emerson
> Assignee: Nistor Adrian
> Priority: Major
>
> The following Pojo always returns an empty collection after being unmarshalled, regardless of whether {{stringList}} was null or empty when marshalled.
> {code:java}
> public class SomePojo {
> @ProtoField(number = 1, collectionImplementation = ArrayList.class)
> final List<String> stringList;
> @ProtoFactory
> public SomePojo(List<String> stringList) {
> this.stringList = stringList;
> }
> }
> {code}
> This is because the generated marshaller always creates the collection instance before attempting to read the collection content:
> {code:java}
> java.util.ArrayList __c$1 = new java.util.ArrayList();
> boolean done = false;
> while (!done) {
> final int tag = $2.readTag();
> switch (tag) {
> case 0:
> done = true;
> break;
> case 10: {
> java.lang.String __v$1 = $2.readString();
> __c$1.add(__v$1);
> break;
> }
> default: {
> if (!$2.skipField(tag)) done = true;
> }
> }
> }
>
> return new org.infinispan.query.dsl.embedded.testdomain.hsearch.SomePojo(__c$1);
> {code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
6 years, 6 months
[JBoss JIRA] (IPROTO-120) Null collection fields always unmarshalled as empty collection implementation
by Ryan Emerson (Jira)
Ryan Emerson created IPROTO-120:
-----------------------------------
Summary: Null collection fields always unmarshalled as empty collection implementation
Key: IPROTO-120
URL: https://issues.jboss.org/browse/IPROTO-120
Project: Infinispan ProtoStream
Issue Type: Bug
Reporter: Ryan Emerson
The following Pojo always returns an empty collection after being unmarshalled, regardless of whether {{stringList}} was null or empty when marshalled.
{code:java}
public class SomePojo {
@ProtoField(number = 1, collectionImplementation = ArrayList.class)
final List<String> stringList;
@ProtoFactory
public SomePojo(List<String> stringList) {
this.stringList = stringList;
}
}
{code}
This is because the generated marshaller always creates the collection instance before attempting to read the collection content:
{code:java}
java.util.ArrayList __c$1 = new java.util.ArrayList();
boolean done = false;
while (!done) {
final int tag = $2.readTag();
switch (tag) {
case 0:
done = true;
break;
case 10: {
java.lang.String __v$1 = $2.readString();
__c$1.add(__v$1);
break;
}
default: {
if (!$2.skipField(tag)) done = true;
}
}
}
return new org.infinispan.query.dsl.embedded.testdomain.hsearch.SomePojo(__c$1);
{code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
6 years, 6 months