confluentinc / confluentinc/cli

CLI-3564: asyncapi import fails to import more complex schema

Open
#1,868 1 comment 0 reactions 1 assignee Assigned to @kcorman0 View on GitHub
bug
Dominant language
Go
Stars
80
Forks
35
Avg merge
2d 10h
Merged PRs (30d)
33

Description

Hi,
first of all I would like to thank you for implementing `confluent asyncapi import` command. It's extremely useful!

Unfortunately, it looks like it doesn't handle `$ref` too well. Check out the following example.

```
confluent asyncapi import --file asyncapi.yaml --overwrite --unsafe-trace
```

```yaml
asyncapi: 2.6.0

info:
title: Example
version: 1.0.0

channels:
entitlements-v1:
x-messageCompatibility: NONE
subscribe:
operationId: EntitlementsV1Subscribe
message:
$ref: "#/components/messages/EntitlementsV1Message"

components:
messages:
EntitlementsV1Message:
name: EntitlementsV1Message
contentType: application/json
payload:
title: EntitlementsV1Message
type: object
required:
- uuid
- level
properties:
uuid:
type: string
format: uuid
level:
$ref: "#/components/schemas/EntityLevel"

schemas:
EntityLevel:
type: string
enum:
- team
- org
```

The result is as follows:
```
POST /subjects/entitlements-v1-value/versions HTTP/1.1
User-Agent: Confluent-CLI/v3.10.0 (https://confluent.io; support@confluent.io)
Content-Length: 251
Accept: application/vnd.schemaregistry.v1+json,application/vnd.schemaregistry+json; qs=0.9,application/json; qs=0.5
Content-Type: application/json
Accept-Encoding: gzip

{"schemaType":"JSON","schema":"{\"properties\":{\"level\":{\"$ref\":\"#/components/schemas/EntityLevel\"},\"uuid\":{\"format\":\"uuid\",\"type\":\"string\"}},\"required\":[\"uuid\",\"level\"],\"title\":\"EntitlementsV1Message\",\"type\":\"object\"}"}

HTTP/2.0 422 Unprocessable Entity
Content-Length: 390
Content-Type: application/vnd.schemaregistry.v1+json
Date: Tue, 18 Apr 2023 11:34:24 GMT

{"error_code":42201,"message":"Invalid schema {subject=entitlements-v1-value,version=0,id=-1,schemaType=JSON,references=[],schema={\"properties\":{\"level\":{\"$ref\":\"#/components/schemas/EntityLevel\"},\"uuid\":{\"format\":\"uuid\",\"type\":\"string\"}},\"required\":[\"uuid\",\"level\"],\"title\":\"EntitlementsV1Message\",\"type\":\"object\"}}, details: #: key [components] not found"}

[WARN] unable to register schema: 422 Unprocessable Entity
```

As far as I can see, the problem is caused by the fact that the body of `POST /subjects/entitlements-v1-value/versions` request contains message schema only - without `components/schema` part.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.