user2523783
user2523783

Reputation: 95

Schema issue with Kafka schema registry

I know I come to you with any news, but I'm stuck solving an issue that probably is my fault, indeed I can't realize what's the solution. I'm using a standalone installation of the Confluent platform (4.0.0 open source version) in order to demonstrate how to adopt the platform for a specific use case. Trying to demonstrate the value of using the schema registry I'm facing the following issue posting a new schema with Postman.

The request is:

http://host:8081/subjects/test/versions  
, method POST
, Header: Accept:application/vnd.schemaregistry.v1+json, application/vnd.schemaregistry+json, application/json
Content-Type:application/json
, Body: 
    {"schema":"{{\"namespace\":\"com.testlab\",\"name\":\"test\",\"type\":\"record\",\"fields\":[{\"name\":\"resourcepath\",\"type\":\"string\"},{\"name\":\"resource\",\"type\":\"string\"}]}}" }

The response is: {"error_code":42201,"message":"Input schema is an invalid Avro schema"}

Looking at docs and after googling a lot I'm without options. Any suggestion ? Thanks for your time R.

Upvotes: 2

Views: 3188

Answers (1)

OneCricketeer
OneCricketeer

Reputation: 191671

You have extra {} around the schema field.

One way to test this is with jq

Before

$ echo '{"schema":"{{\"namespace\":\"com.testlab\",\"name\":\"test\",\"type\":\"record\",\"fields\":[{\"name\":\"resourcepath\",\"type\":\"string\"},{\"name\":\"resource\",\"type\":\"string\"}]}}" }' | jq '.schema|fromjson'
jq: error (at <stdin>:1): Objects must consist of key:value pairs at line 1, column 146 (while parsing '{{"namespace":"com.testlab","name":"test","type":"record","fields":[{"name":"resourcepath","type":"string"},{"name":"resource","type":"string"}]}}')

After

$ echo '{"schema":"{\"namespace\":\"com.testlab\",\"name\":\"test\",\"type\":\"record\",\"fields\":[{\"name\":\"resourcepath\",\"type\":\"string\"},{\"name\":\"resource\",\"type\":\"string\"}]}" }' | jq  '.schema|fromjson'
{
  "namespace": "com.testlab",
  "name": "test",
  "type": "record",
  "fields": [
    {
      "name": "resourcepath",
      "type": "string"
    },
    {
      "name": "resource",
      "type": "string"
    }
  ]
}

See my comment here about importing AVSC files so that you don't need to type out the JSON on the CLI

Upvotes: 0

Related Questions