Shaw Young created AVRO-4094: -------------------------------- Summary: Namespaces not mapped in type references Key: AVRO-4094 URL: https://issues.apache.org/jira/browse/AVRO-4094 Project: Apache Avro Issue Type: Bug Components: csharp Affects Versions: 1.11.4 Environment: Avrogen is being run against dotnet 8 c# code from the linux command line. Reporter: Shaw Young
Given this avsc schema file {code:java} [ { "type": "enum", "name": "Planets", "namespace": "myapp.account", "symbols": [ "EARTH", "MARS", "VENUS", "MERCURY" ], "doc": "Planets of the solar system" }, { "type": "record", "name": "AccountCreation", "namespace": "myapp.account", "doc": "A individual user of the system.", "fields": [ { "name": "id", "type": "string", "doc": "The unique identifier for the user." }, { "name": "name", "type": [ "null", "string" ], "default": null, "doc": "" }, { "name": "homePlanet", "type": "Planets", "doc": "" }, { "name": "favouritePlanet", "type": [ "null", "Planets" ], "default": null, "doc": "" } ] } ] {code} and the avrogen with the following parameters; {code:java} avrogen -s ./simple.avsc ./out --namespace myapp.account:MyApp.Account{code} Everything is generated as expected; {code:java} out └── App └── Account ├── AccountCreation.cs └── Planets.cs {code} Now consider a minor alteration of moving Planets into its own common namespace so it can reused- we still wish to reference it from the AccountCreation entity by simply adding the namespace to the type; {code:java} [ { "type": "enum", "name": "Planets", "namespace": "myapp.common", "symbols": [ "EARTH", "MARS", "VENUS", "MERCURY" ], "doc": "Planets of the solar system" }, { "type": "record", "name": "AccountCreation", "namespace": "myapp.account", "doc": "A individual user of the system.", "fields": [ { "name": "id", "type": "string", "doc": "The unique identifier for the user." }, { "name": "name", "type": [ "null", "string" ], "default": null, "doc": "" }, { "name": "homePlanet", "type": "myapp.common.Planets", "doc": "" }, { "name": "favouritePlanet", "type": [ "null", "myapp.common.Planets" ], "default": null, "doc": "" } ] } ] {code} Including the extra namespace mapping when running avrogen; {code:java} avrogen -s ./demo.avsc ./out --namespace myapp.common:App.Common --namespace myapp.account:MyApp.Account{code} This run fails {code:java} Exception occurred. Undefined name: myapp.common.Planets at '[1].fields[2].type'{code} Looking at the code it looks like the preparse step will substitute namespace attributes using the collection of namespace mapping, but doesn't substitute any of the type mappings, if they include one of the mapped namespaces. -- This message was sent by Atlassian Jira (v8.20.10#820010)