Error generating CSharp Client: The type does not contain any information
Nobody has claimed this yet.
- Dominant language
- C#
- Stars
- 3.8k
- Forks
- 333
- Avg merge
- 16h 29m
- Merged PRs (30d)
- 116
Description
### What are you generating using Kiota, clients or plugins?
API Client/SDK
### In what context or format are you using Kiota?
Nuget tool
### Client library/SDK language
Csharp
### Describe the bug
First off. I dont really know if this is a bug or not. Or if this is just not supported or a invalid schema.
But i have taken the edmx from our Dynamics 365 instance and trimmed the schema down to only include one property. After that i use Microsoft.OpenApi.OData to generate a json schema from that file. The schema seems valid when i try it on https://editor-next.swagger.io/
But when i run:
`kiota generate -d c:/temp/d365_min.json -l csharp -n Dynamics -c D365Client -o c:/temp/D365/Generated --ll debug`
I get an exception beacuse of an (what i believe empty type)
```
System.InvalidOperationException: The type does not contain any information Path: \accounts, Reference Id: Microsoft.Dynamics.CRM.crmbaseentity
at Kiota.Builder.KiotaBuilder.CreateInheritedModelDeclaration(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, String classNameSuffix, CodeNamespace codeNamespace, Boolean isRequestBody, String typeNameForInlineSchema, Boolean isViaDiscriminator) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1774
at Kiota.Builder.KiotaBuilder.CreateInheritedModelDeclaration(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, String classNameSuffix, CodeNamespace codeNamespace, Boolean isRequestBody, String typeNameForInlineSchema, Boolean isViaDiscriminator) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1738
at Kiota.Builder.KiotaBuilder.CreateInheritedModelDeclarationAndType(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, String classNameSuffix, CodeNamespace codeNamespace, Boolean isRequestBody, String typeNameForInlineSchema, Boolean isViaDiscriminator) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1705
at Kiota.Builder.KiotaBuilder.CreateModelDeclarations(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, CodeElement parentElement, String suffixForInlineSchema, OpenApiResponse response, String typeNameForInlineSchema, Boolean isRequestBody, Boolean isViaDiscriminator) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1874
at Kiota.Builder.KiotaBuilder.CreateCollectionModelDeclaration(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, CodeNamespace codeNamespace, String typeNameForInlineSchema, Boolean isRequestBody) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1931
at Kiota.Builder.KiotaBuilder.CreateModelDeclarations(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, CodeElement parentElement, String suffixForInlineSchema, OpenApiResponse response, String typeNameForInlineSchema, Boolean isRequestBody, Boolean isViaDiscriminator) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1911
at Kiota.Builder.KiotaBuilder.<>c__DisplayClass127_0.b__0(KeyValuePair`2 x) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 2322
at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)+MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
at Kiota.Builder.KiotaBuilder.CreatePropertiesForModelClass(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, CodeNamespace ns, CodeClass model) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 2314
at Kiota.Builder.KiotaBuilder.AddModelClass(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, String declarationName, CodeNamespace currentNamespace, OpenApiOperation currentOperation, CodeClass inheritsFrom) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 2091
at Kiota.Builder.KiotaBuilder.AddModelDeclarationIfDoesntExist(OpenApiUrlTreeNode currentNode, OpenApiOperation currentOperation, OpenApiSchema schema, String declarationName, CodeNamespace currentNamespace, CodeClass inheritsFrom) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1973
at Kiota.Builder.KiotaBuilder.CreateModelDeclarationAndType(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, CodeNamespace codeNamespace, String classNameSuffix, OpenApiResponse response, String typeNameForInlineSchema, Boolean isRequestBody) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1697
at Kiota.Builder.KiotaBuilder.CreateModelDeclarations(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, CodeElement parentElement, String suffixForInlineSchema, OpenApiResponse response, String typeNameForInlineSchema, Boolean isRequestBody, Boolean isViaDiscriminator) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1904
at Kiota.Builder.KiotaBuilder.GetExecutorMethodReturnType(OpenApiUrlTreeNode currentNode, OpenApiSchema schema, OpenApiOperation operation, CodeClass parentClass, OperationType operationType) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1279
at Kiota.Builder.KiotaBuilder.CreateOperationMethods(OpenApiUrlTreeNode currentNode, OperationType operationType, OpenApiOperation operation, CodeClass parentClass) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 1364
at Kiota.Builder.KiotaBuilder.CreateRequestBuilderClass(CodeNamespace currentNamespace, OpenApiUrlTreeNode currentNode, OpenApiUrlTreeNode rootNode) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 721
at Kiota.Builder.KiotaBuilder.<>c__DisplayClass55_0.b__0(OpenApiUrlTreeNode childNode) in C:\Code\kiota\src\Kiota.Builder\KiotaBuilder.cs:line 736
at System.Threading.Tasks.Parallel.<>c__DisplayClass43_0`2.b__1(IEnumerator& partitionState, Int64 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
```
### Expected behavior
Successfull client generation.
### How to reproduce
`kiota generate -d c:/temp/d365_min.json -l csharp -n Dynamics -c D365Client -o c:/temp/D365/Generated --ll debug`
### Open API description file
[d365_min.json](https://github.com/user-attachments/files/18653163/d365_min.json)
### Kiota Version
1.22.3+a544276a5ee9d4a7b67cc0fbd5ce2804c172fa14
### Latest Kiota version known to work for scenario above?(Not required)
_No response_
### Known Workarounds
I did run this in latest main of your repo as well.
and if i replace
`throw new InvalidOperationException($"The type does not contain any information Path: {currentNode.Path}, Reference Id: {referenceId}"),`
at line [KiotaBuilder:1774](https://github.com/microsoft/kiota/blob/main/src/Kiota.Builder/KiotaBuilder.cs#L1774) with
`AddModelDeclarationIfDoesntExist(currentNode, operation, schema, className, shortestNamespace)`
It seems to work, but I'm not sure what I'm doing here 😅
### Configuration
Windows 11 24H2
x64
### Debug output
Click to expand log
```
```
### Other information
_No response_
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce with d365_min.json using the documented kiota generate command, then inspect src/Kiota.Builder/KiotaBuilder.cs around CreateInheritedModelDeclaration at line 1774 and the referenced crmbaseentity schema. Done means the supplied description generates the C# client without the InvalidOperationException, with regression coverage for this case.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- api, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100