[infinispan-issues] [JBoss JIRA] (IPROTO-120) Null collection fields always unmarshalled as empty collection implementation

Ryan Emerson (Jira) issues at jboss.org
Thu Oct 3 05:35:00 EDT 2019


    [ https://issues.jboss.org/browse/IPROTO-120?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13794224#comment-13794224 ] 

Ryan Emerson commented on IPROTO-120:
-------------------------------------

I agree that returning an empty String instead of null is horrible!

My preference would be for us to be consistent. If we return null for String, Instant and Date, we should also do the same for a collection. 

I do like the idea of making the null/empty collection behaviour configurable though. Could we make use of the {{ProtoField.defaultValue}} field for collections? "null" returns a null collection and "empty" returns an empty one? I don't mind what the actual strings are, but we could make it a bit more user friendly by utilising String constants. Maybe something like {{ProtobufUtil.NULL_COLLECTION}} and {{ProtobufUtil.EMPTY_COLLECTION}}.

> 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)


More information about the infinispan-issues mailing list