Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nullable enums fields are not deserialized #174

Closed
ievgenii-shepeliuk opened this issue Jan 24, 2022 · 1 comment
Closed

Nullable enums fields are not deserialized #174

ievgenii-shepeliuk opened this issue Jan 24, 2022 · 1 comment

Comments

@ievgenii-shepeliuk
Copy link

Hello
I have a schema looking like this

{
  "name": "UserInputSubmitted",
  "namespace": "MyNamespace",
  "type": "record",
  "fields": [
    {
      "name": "AccountStatus",
      "type": ["null", {
        "namespace": "MyNamespace",
        "name": "AccountStatus",
        "type": "enum",
        "symbols": ["New","Active"]
      }]
    },
    {
      "name": "IpAddress", "type": "string"
    }
  ]
}

Message are successfully serialized, i.e. published. But when consuming - I get following error

      Chr.Avro.UnsupportedTypeException: A deserializer for a union containing Chr.Avro.Abstract.NullSchema cannot be built for Endeavour.UserInputValidation.Pipelines.Kafka.Abstractions.AccountStatus.
         at Chr.Avro.Serialization.UnionDeserializerBuilderCase.<>c__DisplayClass7_0.<BuildExpression>b__0(Schema child, Int32 index)
         at System.Linq.Enumerable.SelectIterator[TSource,TResult](IEnumerable`1 source, Func`3 selector)+MoveNext()
         at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
         at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
         at Chr.Avro.Serialization.UnionDeserializerBuilderCase.BuildExpression(TypeResolution resolution, Schema schema, IBinaryDeserializerBuilderContext context)
         at Chr.Avro.Serialization.BinaryDeserializerBuilder.BuildExpression(Type type, Schema schema, IBinaryDeserializerBuilderContext context)
         at Chr.Avro.Serialization.RecordDeserializerBuilderCase.<>c__DisplayClass4_3.<BuildExpression>b__7(RecordField field)
         at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
         at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
         at System.Collections.Generic.SparseArrayBuilder`1.ReserveOrAdd(IEnumerable`1 items)
         at System.Linq.Enumerable.ConcatNIterator`1.LazyToArray()
         at System.Linq.Enumerable.ConcatNIterator`1.ToArray()
         at System.Dynamic.Utils.CollectionExtensions.ToReadOnly[T](IEnumerable`1 enumerable)
         at System.Linq.Expressions.Expression.Block(IEnumerable`1 variables, IEnumerable`1 expressions)
         at Chr.Avro.Serialization.RecordDeserializerBuilderCase.BuildExpression(TypeResolution resolution, Schema schema, IBinaryDeserializerBuilderContext context)
         at Chr.Avro.Serialization.BinaryDeserializerBuilder.BuildExpression(Type type, Schema schema, IBinaryDeserializerBuilderContext context)
         at Chr.Avro.Serialization.BinaryDeserializerBuilder.BuildDelegate[T](Schema schema)
         at Chr.Avro.Confluent.AsyncSchemaRegistryDeserializer`1.<DeserializeAsync>b__16_0(Int32 id)
         at Chr.Avro.Confluent.AsyncSchemaRegistryDeserializer`1.DeserializeAsync(ReadOnlyMemory`1 data, Boolean isNull, SerializationContext context)

Is it expected behaviour or a bug ?

@ievgenii-shepeliuk
Copy link
Author

This piece of code is causing the issue UnionDeserializerBuilderCase

I've created my own IBinaryDeserializerBuilderCase overriding UnionDeserializerBuilderCase and removed that block of code.
Now deserialization works.

@ch-robinson ch-robinson locked and limited conversation to collaborators Jan 24, 2022
@dstelljes dstelljes converted this issue into discussion #175 Jan 24, 2022

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant