David Neukam created AVRO-4187:
----------------------------------
Summary: Avrogen (csharp) --namespace causes "SCHEMA" to contain
csharp instead of avro namespaces leading to the serializer not finding the
schema in the schema registry
Key: AVRO-4187
URL: https://issues.apache.org/jira/browse/AVRO-4187
Project: Apache Avro
Issue Type: Bug
Components: csharp
Affects Versions: 1.12.0, 1.11.1
Reporter: David Neukam
When using *avrogen* for generating C# models from a schemafile, the
*--namespace* option doesn't behave as expected.
When running
{code:java}
avrogen -s file.avsc . --namespace my.avro.ns:my.csharp.ns
{code}
the namespace within the SCHEMA property of the generated C# files is changed
to {*}my.csharp.ns{*}, but should be left with value *my.avro.ns.*
This was introduced with the bugfix in AVRO-2883.
Example of expected output ({*}TestModel.cs{*}):
{code:java}
namespace my.csharp.ns
{
using System;
using System.Collections.Generic;
using System.Text;
using Avro;
using Avro.Specific;
public partial class TestModel : ISpecificRecord
{
public static Schema _SCHEMA =
Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"TestModel\",\"namespace\":\"my.avro.ns\",\"fields\":[{\"name\":\"e"
+
"ventType\",\"type\":{\"type\":\"enum\",\"name\":\"EventType\",\"namespace\":\"my.avro.ns\",\"sym"
+
"bols\":[\"CREATE\",\"UPDATE\",\"DELETE\"]}}]}");
private my.csharp.ns.EventType _eventType;
// More generated code
}
}
{code}
Example of *ACTUAL* output ({*}TestModel.cs{*}):
{code:java}
namespace my.csharp.ns
{
using System;
using System.Collections.Generic;
using System.Text;
using Avro;
using Avro.Specific;
public partial class TestModel : ISpecificRecord
{
public static Schema _SCHEMA =
Avro.Schema.Parse("{\"type\":\"record\",\"name\":\"TestModel\",\"namespace\":\"my.csharp.ns\",\"fields\":[{\"name\":\"e"
+
"ventType\",\"type\":{\"type\":\"enum\",\"name\":\"EventType\",\"namespace\":\"my.csharp.ns\",\"sym"
+
"bols\":[\"CREATE\",\"UPDATE\",\"DELETE\"]}}]}");
private my.csharp.ns.EventType _eventType;
// More generated code
}
}{code}
This issue is already mentioned in the comments of AVRO-2883:
{quote}Calling Schema.ToString() on the generated _SCHEMA property will use the
mapped namespaces. I suspect this could cause
[Confluent.SchemaRegistry.Serdes.SpecificSerializerImpl<T>.Serialize|https://github.com/confluentinc/confluent-kafka-dotnet/blob/0f44064fd7ff2513e5fb01230f0faab9f9715a64/src/Confluent.SchemaRegistry.Serdes.Avro/SpecificSerializerImpl.cs#L228]
not to find the schema in the schema registry, if it is configured to neither
register schemas automatically nor use the latest schema. I'm not sure whether
their schema registry distinguishes between schemas using different namespaces.
{quote}
??[~kniemitalo]??
--
This message was sent by Atlassian Jira
(v8.20.10#820010)