microsoft / microsoft/kiota

Error generating CSharp Client: The type does not contain any information

Open
#6,087 7 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Csharp Needs: Discussion 📢 type:bug
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.