I'm creating a custom connector from an OpenApi file and when I test an operation (GetAd)
I am getting a Schema Validation error
Two of my operations work but four do not
The two that work do not expect parameters in the path. The other four do.
I've searched this forum as well as Google searches but have been unable to find the issue.
The custom connector was created from an OpenApi file. The swagger follows.
{
"swagger": "2.0",
"info": {
"title": "adman APIs",
"description": "APIs available for adman",
"version": "1.0.0"
},
"host": "myserver:10182",
"schemes": [ "http" ],
"basePath": "/web/services",
"tags": [
{
"name": "adman APIs",
"description": "APIs available for adman"
}
],
"definitions": {
"adHdrDsTmp": {
"type": "object",
"properties": {
"adType": {
"type": "string",
"maxLength": 1
},
"adDate": {
"type": "string",
"maxLength": 10
},
"adDesc": {
"type": "string",
"maxLength": 30
},
"adDeadline": {
"type": "string",
"maxLength": 10
},
"adWhsDeadline": {
"type": "string",
"maxLength": 10
}
}
},
"GetAdResult": {
"type": "object",
"properties": {
"adHdrDs": {
"$ref": "#/definitions/adHdrDsTmp"
}
}
},
"GetAllAdsByTypeResult": {
"type": "object",
"properties": {
"adHdrDs_length": {
"type": "integer",
"format": "int32"
},
"adHdrDs": {
"type": "array",
"maxItems": 1000,
"items": {
"$ref": "#/definitions/adHdrDsTmp"
}
}
}
},
"GetAllAdsResult": {
"type": "object",
"properties": {
"adHdrDs_length": {
"type": "integer",
"format": "int32"
},
"adHdrDs": {
"type": "array",
"maxItems": 1000,
"items": {
"$ref": "#/definitions/adHdrDsTmp"
}
}
}
}
},
"paths": {
"/adman/{adtype}/{addate}": {
"delete": {
"tags": [
"adman APIs"
],
"operationId": "DeleteAd",
"summary": "Delete an Ad by supplying the ad type char(1) and ad date char(8) in the format yyyymmdd",
"description": "Delete an Ad by supplying the ad type and ad date",
"consumes": [
"*/*"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "adtype",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w",
"maxLength": 1
},
{
"name": "addate",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\d{4}-\\d{2}-\\d{2}",
"maxLength": 10
}
],
"responses": {
"200": {
"description": "Successful operation"
}
}
},
"get": {
"tags": [
"adman APIs"
],
"operationId": "GetAd",
"summary": "Get an Ad by supplying the ad type char(1) and ad date char(8) in the format yyyymmdd",
"description": "Get an Ad by supplying the ad type and ad date",
"consumes": [
"*/*"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "adtype",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w",
"maxLength": 1
},
{
"name": "addate",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\d{4}-\\d{2}-\\d{2}",
"maxLength": 10
}
],
"responses": {
"200": {
"description": "Successful operation",
"schema": {
"$ref": "#/definitions/GetAdResult"
}
}
}
},
"put": {
"tags": [
"adman APIs"
],
"operationId": "UpdateAd",
"summary": "Update an Ad by supplying the ad type char(1) and ad date char(8) in the format yyyymmdd",
"description": "Update an Ad by supplying the ad type and ad date. The new values are specified in the body",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "adtype",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w",
"maxLength": 1
},
{
"name": "addate",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\d{4}-\\d{2}-\\d{2}",
"maxLength": 10
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/adHdrDsTmp"
}
}
],
"responses": {
"200": {
"description": "Successful operation"
}
}
}
},
"/{adtype}": {
"get": {
"tags": [
"adman APIs"
],
"operationId": "GetAllAdsByType",
"summary": "Get all Ads by Type by dupllying s type",
"description": "Get all Ads by Type by dupllying s type",
"consumes": [
"*/*"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "adtype",
"in": "path",
"required": true,
"type": "string",
"pattern": "\\w",
"maxLength": 1
}
],
"responses": {
"200": {
"description": "Successful operation",
"schema": {
"$ref": "#/definitions/GetAllAdsByTypeResult"
}
}
}
}
},
"/": {
"get": {
"tags": [
"adman APIs"
],
"operationId": "GetAllAds",
"summary": "getallads",
"description": "Get all ads - there are no parameters",
"consumes": [
"*/*"
],
"produces": [
"application/json"
],
"parameters": [],
"responses": {
"200": {
"description": "Successful operation",
"schema": {
"$ref": "#/definitions/GetAllAdsResult"
}
}
}
},
"post": {
"tags": [
"adman APIs"
],
"operationId": "CreateAd",
"summary": "Createad",
"description": "Create a new ad. There are no parameters but the values are specified in the body",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/adHdrDsTmp"
}
}
],
"responses": {
"200": {
"description": "Successful operation"
}
}
}
}
}
}
If anyone has any suggestions as to what the issue may be please respond.
Thanks,
Rob
Believe it or not, I had the same error and the request was just fine. I had a two value response in the Content-Type header on the body (because that is what matched the message body header in the actual response)
I highly recommend just making Content-Type Application/Json as the only response body header, if applicable and ignore the rest. Use the results to build the schema in the editor but don't 'overwhelm' the wizard.
This Custom Connector wizard needs a lot of work to eliminate bugs.
Hello again,
Since the "Update connecor" fix was not working for me I played a little while with the security part of the connector scaffolding. I changed "Clé API" for "API Key" as a api-key label. It was not changed inside the Swagger text but when I updated the connector everithing was working fine. I do suspect there's a formatting bug occurring when saving modified Swagger.
Anyway, I am a happy connector creator now!
Pierre-Emmanuel
Hello,
I have exactly the same problem when issuing a POST command from a Power Apps custom connector. It is used to send a semantic query and works great from POSTMAN. When I try to TEST the connector I get a 403 message with a header whithout any interesting information and Ă mismatch object/string notification. Here's the Swagger:
swagger: '2.0'
info: {version: 1.0.0, title: Systra 2022, description: Systra 2022}
host: systra-semantic-search.search.windows.net
basePath: /
schemes: [https]
consumes: []
produces: [application/json]
paths:
/indexes/sharepoint-index/docs/search:
post:
summary: Systra Semantic Query
description: Systra Semantic Query
operationId: SystraSemanticQuery
parameters:
- {name: api-version, default: 2021-04-30-Preview, in: query, type: string,
required: true}
- {name: Accept, in: header, required: true, type: string, default: '*/*', description: Accept}
- {name: Content-Type, in: header, required: true, type: string, default: application/json,
description: Content-Type}
- {name: api-key, in: header, required: true, type: string, default: MyServiceKeyObfuscated,
description: api-key}
- name: body
in: body
schema:
type: object
properties:
search: {type: string, description: search}
queryType: {type: string, description: queryType}
queryLanguage: {type: string, description: queryLanguage}
answers: {type: string, description: answers}
captions: {type: string, description: captions}
count: {type: string, description: count, title: '', format: ''}
semanticConfiguration: {type: string, description: semanticConfiguration}
highlightPreTag: {type: string, description: highlightPreTag}
highlightPostTag: {type: string, description: highlightPostTag}
speller: {type: string, description: speller}
default: {search: 'what is a measurement campaign?', queryType: semantic,
queryLanguage: en-us, answers: extractive|count-3, captions: extractive|highlight-true,
count: 'true', semanticConfiguration: systrasemantics, highlightPreTag: <strong>,
highlightPostTag: </strong>, speller: lexicon}
required: true
responses:
default:
description: default
schema:
type: object
properties:
'@odata.context': {type: string, description: '@odata.context'}
'@odata.count': {type: integer, format: int32, description: '@odata.count'}
'@search.answers':
type: array
items: {}
description: '@search.answers'
'@search.nextPageParameters':
type: object
properties:
search: {type: string, description: search}
queryType: {type: string, description: queryType}
queryLanguage: {type: string, description: queryLanguage}
answers: {type: string, description: answers}
captions: {type: string, description: captions}
count: {type: boolean, description: count}
semanticConfiguration: {type: string, description: semanticConfiguration}
highlightPreTag: {type: string, description: highlightPreTag}
highlightPostTag: {type: string, description: highlightPostTag}
speller: {type: string, description: speller}
skip: {type: integer, format: int32, description: skip}
description: '@search.nextPageParameters'
value:
type: array
items:
type: object
properties:
'@search.score': {type: number, format: float, description: '@search.score'}
'@search.rerankerScore': {type: number, format: float, description: '@search.rerankerScore'}
'@search.captions':
type: array
items:
type: object
properties:
text: {type: string, description: text}
highlights: {type: string, description: highlights}
description: '@search.captions'
id: {type: string, description: id}
metadata_spo_item_name: {type: string, description: metadata_spo_item_name}
metadata_spo_item_path: {type: string, description: metadata_spo_item_path}
metadata_spo_item_content_type: {type: string, description: metadata_spo_item_content_type}
metadata_spo_item_last_modified: {type: string, description: metadata_spo_item_last_modified}
metadata_spo_item_size: {type: integer, format: int32, description: metadata_spo_item_size}
content: {type: string, description: content}
description: value
'@odata.nextLink': {type: string, description: '@odata.nextLink'}
/datasources: {}
/indexes: {}
/indexers: {}
definitions: {}
parameters: {}
responses: {}
securityDefinitions:
Clé API: {type: apiKey, in: header, name: api-key}
security:
- Clé API: []
tags: []
I have been stuck on this one for days so I would really appreciate any help.
Thank you!
Pierre-Emmanuel
I had exactly the same problem, and the "fix" was the same 🤷‍
Clicking on update connector without making any change had resolved this issue for me.Unable to find root cause.
Hi @rogersonra ,
Just wondering if you are able to resolve this issue ? I have created a custom connector and when i "Test" , I get the error in Schema Validation saying " Property "" type mismatch, Expected: "array", Actual: "string" ".
I have tried creating the custom connector by
a. Importing a postman v1 collection
b. Exporting an API directly from APIM into Power APps environment.
Both these custom connectors give the same error upon "Testing". Any help is highly appreciated.
PS: Already tried adding https://powerapp.microsoft.com in the allowed origins in CORS policy of APIM
Thank you!
Thanks for replying @rohsh354,
When you say "Please check the parameters and its values which are being returned and its data type." you're referring to the the Body in the Response correct?
If I call getad using postman and the same parameters
an object is returned.
Shouldn't the Response body in the connector be returning an object as well if both postman and powerapps are based on the same swagger file (which they are)?
Thanks,
rogersonra
Hello,
Type value mismatch usually means that property is defined as object, but the default value is being passed as string.
Please check the parameters and its values which are being returned and its data type.
WarrenBelz
146,745
Most Valuable Professional
RandyHayes
76,287
Super User 2024 Season 1
Pstork1
66,091
Most Valuable Professional