使用 openapi-generator 解析错误类型的无效类型,将其设置为字符串

如何解决使用 openapi-generator 解析错误类型的无效类型,将其设置为字符串

我有以下 openapi 文件架构

{
    "openapi": "3.0.3","info": {
        "title": "Hyperledger Cactus Plugin - Connector Quorum","description": "Can perform basic tasks on a Quorum ledger","version": "0.0.1"
    },"servers": [
        {
            "url": "https://www.cactus.stream/{basePath}","description": "Public test instance","variables": {
                "basePath": {
                    "default": ""
                }
            }
        },{
            "url": "http://localhost:4000/{basePath}","description": "Local test instance","variables": {
                "basePath": {
                    "default": ""
                }
            }
        }
    ],"components": {
        "schemas": {
            "Web3SigningCredential": {
                "type": "object","required": [
                    "type"
                ],"discriminator": {
                    "propertyName": "type"
                },"oneOf": [
                    {
                        "$ref": "#/components/schemas/Web3SigningCredentialGethKeychainPassword"
                    },{
                        "$ref": "#/components/schemas/Web3SigningCredentialCactusKeychainRef"
                    },{
                        "$ref": "#/components/schemas/Web3SigningCredentialPrivateKeyHex"
                    },{
                        "$ref": "#/components/schemas/Web3SigningCredentialNone"
                    }
                ],"properties": {
                    "type": {
                        "$ref": "#/components/schemas/Web3SigningCredentialType"
                    }
                }
            },"Web3SigningCredentialGethKeychainPassword": {
                "type": "object","required": [
                    "type","ethAccount","secret"
                ],"properties": {
                    "type": {
                        "$ref": "#/components/schemas/Web3SigningCredentialType"
                    },"ethAccount": {
                        "type": "string","description": "The ethereum account (public key) that the credential  belongs to. Basically the username in the traditional terminology of authentication.","minLength": 64,"maxLength": 64,"nullable": false
                    },"secret": {
                        "type": "string","description": "A geth keychain unlock password.","minLength": 0,"maxLength": 65535
                    }
                }
            },"Web3SigningCredentialCactusKeychainRef": {
                "type": "object","keychainId","keychainEntryKey"
                ],"description": "The ethereum account (public key) that the credential  belongs to. Basically the username in the traditional  terminology of authentication.","keychainEntryKey": {
                        "type": "string","description": "The key to use when looking up the the keychain entry holding the secret pointed to by the  keychainEntryKey parameter.","maxLength": 1024
                    },"keychainId": {
                        "type": "string","description": "The keychain ID to use when looking up the the keychain plugin instance that will be used to retrieve the secret pointed to by the keychainEntryKey parameter.","maxLength": 1024
                    }
                }
            },"Web3SigningCredentialPrivateKeyHex": {
                "type": "object","description": "The ethereum account (public key) that the credential belongs to. Basically the username in the traditional terminology of authentication.","description": "The HEX encoded private key of an eth account.","Web3SigningCredentialNone": {
                "type": "object","description": "Using this denotes that there is no signing required because the transaction is pre-signed.","Web3SigningCredentialType": {
                "type": "string","enum": [
                    "CACTUS_KEYCHAIN_REF","GETH_KEYCHAIN_PASSWORD","PRIVATE_KEY_HEX","NONE"
                ]
            },"EthContractInvocationType": {
                "type": "string","enum": [
                    "SEND","CALL"
                ]
            },"SolidityContractJsonArtifact": {
                "type": "object","required": [
                    "contractName"
                ],"properties": {
                    "contractName": {
                        "type": "string","metadata": {
                        "type": "string","bytecode": {
                        "type": "string","deployedBytecode": {
                        "type": "string","sourceMap": {
                        "type": "string","deployedSourceMap": {
                        "type": "string","sourcePath": {
                        "type": "string"
                    },"compiler": {
                        "type": "object","additionalProperties": true,"properties": {
                            "name": {
                                "type": "string"
                            },"version": {
                                "type": "string"
                            }
                        }
                    },"functionHashes": {
                        "type": "object","additionalProperties": true
                    },"gasEstimates": {
                        "properties": {
                            "creation": {
                                "type": "object","properties": {
                                    "codeDepositCost": {
                                        "type": "string"
                                    },"executionCost": {
                                        "type": "string"
                                    },"totalCost": {
                                        "type": "string"
                                    }
                                }
                            },"external": {
                                "type": "object","additionalProperties": true
                            }
                        }
                    }
                }
            },"QuorumTransactionConfig": {
                "type": "object","required": [],"properties": {
                    "rawTransaction": {
                        "type": "string","from": {
                        "oneOf": [
                            {
                                "type": "string"
                            },{
                                "type": "number"
                            }
                        ]
                    },"to": {
                        "oneOf": [
                            {
                                "type": "string"
                            }
                        ]
                    },"value": {
                        "oneOf": [
                            {
                                "type": "string"
                            },"gas": {
                        "oneOf": [
                            {
                                "type": "string"
                            },"gasPrice": {
                        "oneOf": [
                            {
                                "type": "string"
                            },"data": {
                        "oneOf": [
                            {
                                "type": "string"
                            }
                        ]
                    }
                }
            },"Web3TransactionReceipt": {
                "type": "object","required": [
                    "blockHash","blockNumber","transactionHash","transactionIndex","status","from","to","gasUsed"
                ],"properties": {
                    "status": {
                        "type": "boolean","transactionHash": {
                        "type": "string","pattern": "/^0x([A-Fa-f0-9]{64})$/"
                    },"transactionIndex": {
                        "type": "number","blockHash": {
                        "type": "string","blockNumber": {
                        "type": "number","gasUsed": {
                        "type": "number","contractAddress": {
                        "type": "string","nullable": true
                    },"from": {
                        "type": "string","to": {
                        "type": "string","nullable": false
                    }
                }
            },"RunTransactionRequest": {
                "type": "object","required": [
                    "web3SigningCredential","transactionConfig"
                ],"properties": {
                    "web3SigningCredential": {
                        "$ref": "#/components/schemas/Web3SigningCredential","transactionConfig": {
                        "$ref": "#/components/schemas/QuorumTransactionConfig","timeoutMs": {
                        "type": "number","description": "The amount of milliseconds to wait for a transaction receipt with thehash of the transaction(which indicates successful execution) beforegiving up and crashing.","minimum": 0,"default": 60000,"RunTransactionResponse": {
                "type": "object","required": [
                    "transactionReceipt"
                ],"properties": {
                    "transactionReceipt": {
                        "$ref": "#/components/schemas/Web3TransactionReceipt"
                    }
                }
            },"DeployContractSolidityBytecodeV1Request": {
                "type": "object","required": [
                    "bytecode","web3SigningCredential"
                ],"nullable": false,"minLength": 1,"maxLength": 24576,"description": "See https://ethereum.stackexchange.com/a/47556 regarding the maximum length of the bytecode"
                    },"gas": {
                        "type": "number","gasPrice": {
                        "type": "string","description": "The amount of milliseconds to wait for a transaction receipt with theaddress of the contract(which indicates successful deployment) beforegiving up and crashing.","DeployContractSolidityBytecodeV1Response": {
                "type": "object","InvokeContractV1Request": {
                "type": "object","required": [
                    "contractAbi","web3SigningCredential","contractAddress","invocationType","methodName","params"
                ],"contractAbi": {
                        "description": "The application binary interface of the solidity contract","type": "array","items": {},"invocationType": {
                        "$ref": "#/components/schemas/EthContractInvocationType","description": "Indicates wether it is a CALL or a SEND type of  invocation where only SEND ends up creating an actual transaction on the ledger."
                    },"methodName": {
                        "description": "The name of the contract method to invoke.","type": "string","maxLength": 2048
                    },"params": {
                        "description": "The list of arguments to pass in to the contract method being invoked.","default": [],"items": {}
                    },"description": "The amount of milliseconds to wait for a transaction receipt beforegiving up and crashing. Only has any effect if the invocation type is SEND","InvokeContractV1Response": {
                "type": "object","properties": {
                    "transactionReceipt": {
                        "$ref": "#/components/schemas/Web3TransactionReceipt"
                    },"callOutput": {}
                }
            }
        }
    },"paths": {
        "/api/v1/plugins/@hyperledger/cactus-plugin-ledger-connector-quorum/deploy-contract-solidity-bytecode": {
            "post": {
                "operationId": "apiV1QuorumDeployContractSolidityBytecode","summary": "Deploys the bytecode of a Solidity contract.","parameters": [],"requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DeployContractSolidityBytecodeV1Request"
                            }
                        }
                    }
                },"responses": {
                    "200": {
                        "description": "OK","content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DeployContractSolidityBytecodeV1Response"
                                }
                            }
                        }
                    }
                }
            }
        },"/api/v1/plugins/@hyperledger/cactus-plugin-ledger-connector-quorum/run-transaction": {
            "post": {
                "operationId": "apiV1QuorumRunTransaction","summary": "Executes a transaction on a quorum ledger","requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RunTransactionRequest"
                            }
                        }
                    }
                },"content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RunTransactionResponse"
                                }
                            }
                        }
                    }
                }
            }
        },"/api/v1/plugins/@hyperledger/cactus-plugin-ledger-connector-quorum/invoke-contract": {
            "post": {
                "operationId": "apiV1QuorumInvokeContract","summary": "Invokeds a contract on a quorum ledger","requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/InvokeContractV1Request"
                            }
                        }
                    }
                },"content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/InvokeContractV1Response"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

简而言之,架构(问题所在)就像
Web3SigningCredential -> { Web3SigningCredentialPrivateKeyHexWeb3SigningCredentialGethKeychainPasswordWeb3SigningCredentialNoneWeb3SigningCredentialCactusKeychainRef 之一 -> > Web3SigningCredentialType

当我尝试使用

解析它时
openapi-generator generate --input-spec file_mentioned_above -g go -o some_path

我收到一个错误说明

Exception in thread "main" java.lang.RuntimeException: Could not process model 'Web3SigningCredential'.Please make sure that your schema is correct!
        at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:477)
        at org.openapitools.codegen.DefaultGenerator.generate(DefaultGenerator.java:852)
        at org.openapitools.codegen.cmd.Generate.execute(Generate.java:432)
        at org.openapitools.codegen.cmd.OpenApiGeneratorCommand.run(OpenApiGeneratorCommand.java:32)
        at org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.java:66)
Caused by: java.lang.RuntimeException: 'Web3SigningCredential' defines discriminator 'type',but the referenced schema 'Web3SigningCredentialGethKeychainPassword' is incorrect. invalid type for type,set it to string
        at org.openapitools.codegen.DefaultCodegen.getOneOfAnyOfDescendants(DefaultCodegen.java:2792)
        at org.openapitools.codegen.DefaultCodegen.createDiscriminator(DefaultCodegen.java:2897)
        at org.openapitools.codegen.DefaultCodegen.fromModel(DefaultCodegen.java:2249)
        at org.openapitools.codegen.DefaultGenerator.processModels(DefaultGenerator.java:1162)
        at org.openapitools.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:472)

但是当我在上面提到的命令中使用语言 typescript-axios 时,同样的工作

openapi-generator generate --input-spec file_mentioned_above -g typescript-axios -o some_path

我对上面提到的规范文件做错了什么还是与 Go for openapi-generator 有关?

解决方法

尝试重新组织架构以使用 allOf 继承而不是 oneOf。还要确保在基本架构中指定鉴别器 mapping。如果没有 mapping,API 定义假定子架构与鉴别器属性值具有相同的名称,而在您的示例中并非如此。

这是一个 YAML 版本,您可以使用 https://www.json2yaml.com/ 将其转换为 JSON。

components:
  schemas:
    Web3SigningCredential:
      type: object
      required:
        - type
      discriminator:
        propertyName: type
        mapping:
          CACTUS_KEYCHAIN_REF: Web3SigningCredentialCactusKeychainRef
          GETH_KEYCHAIN_PASSWORD: Web3SigningCredentialGethKeychainPassword
          PRIVATE_KEY_HEX: Web3SigningCredentialPrivateKeyHex
          NONE: Web3SigningCredentialNone
      properties:
        type:
          $ref: '#/components/schemas/Web3SigningCredentialType'

    Web3SigningCredentialGethKeychainPassword:
      allOf:
        - $ref: '#/components/schemas/Web3SigningCredential'
        - type: object
          required:
            - ethAccount
            - secret
          properties:
            ethAccount:
              type: string
              description: The ethereum account (public key) that the credential  belongs to. Basically the username in the traditional terminology of authentication.
              minLength: 64
              maxLength: 64
              nullable: false
            secret:
              type: string
              description: A geth keychain unlock password.
              minLength: 0
              maxLength: 65535

相应地更新 Web3SigningCredentialCactusKeychainRefWeb3SigningCredentialPrivateKeyHexWeb3SigningCredentialNone 架构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res