Thomas Vigh Sørensen created AVRO-2883:
------------------------------------------

             Summary: Avrogen (csharp) namespace mapping missing for references
                 Key: AVRO-2883
                 URL: https://issues.apache.org/jira/browse/AVRO-2883
             Project: Apache Avro
          Issue Type: Bug
          Components: csharp
            Reporter: Thomas Vigh Sørensen


When using *avrogen* for generating C# models from a schemafile, the 
*--namespace* option doesn't behave as expected, if the model refers to other 
types (currently only tested with enums). 

When running 
{code:java}
avrogen -s file.avsc . --namespace my.avro.ns:my.csharp.ns
{code}
the actual namespace of the generated C# files is changed to *my.csharp.ns*, 
but any references between the models are not updated with the correct 
namespace.

 

Given a schemafile containing:
{code:json}
{
  "type" : "record",
  "name" : "TestModel",
  "namespace" : "my.avro.ns",
  "fields" : [ {
    "name" : "eventType",
    "type" : {
      "type" : "enum",
      "name" : "EventType",
      "symbols" : [ "CREATE", "UPDATE", "DELETE" ]
    }
  } ]
}
{code}
And running 
{code:java}
avrogen -s models.avsc . --namespace my.avro.ns:my.csharp.ns
{code}
 

Will produce the following *EventType.cs*
{code:c#}
namespace my.csharp.ns
{
        using System;
        using System.Collections.Generic;
        using System.Text;
        using Avro;
        using Avro.Specific;
        
        public enum EventType
        {
                CREATE,
                UPDATE,
                DELETE,
        }
}
{code}
 

and the following *TestModel.cs*
{code:c#}
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.avro.ns.EventType _eventType;
               // More generated code
        }
}
{code}
Notice how the namespace is set correctly to *my.csharp.ns* in both files, but 
the namespace of the referenced *EventType* in *TestModel.cs* incorrect.

 

Example of expected output (*TestModel.cs*):
{code:c#}
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}
 

Code for reproducing the issue can be found at: 
[https://github.com/FuKe/avrogen-namespace-bug]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to