微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

openAPI 生成器错误:无法处理模型“DateTime”请确保您的架构是正确的

如何解决openAPI 生成器错误:无法处理模型“DateTime”请确保您的架构是正确的

我决定从 swagger 生成器迁移到 openapi 生成器。 但是在生成过程中我有一个错误。 有趣的是,swagger 使用相同的 yaml 文件生成没有错误代码

错误

java.lang.RuntimeException: Could not process model 'DateTime'.Please make sure that your schema is correct!
    at org.openapitools.codegen.DefaultGenerator.generateModels (DefaultGenerator.java:499)
    at org.openapitools.codegen.DefaultGenerator.generate (DefaultGenerator.java:875)
    at org.openapitools.codegen.plugin.CodeGenMojo.execute (CodeGenMojo.java:749)
    at org.apache.maven.plugin.DefaultBuildpluginManager.executeMojo (DefaultBuildpluginManager.java:137)
    ...//a lot of "at"
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
Caused by: java.nio.file.InvalidpathException: Illegal char <*> at index 125: C:\Users\imachuzhenko\IdeaProjects\smp\snef\target\generated-sources\openapi\src\main\java\generated\smf\model\org.joda.time.*.java
    at sun.nio.fs.WindowsPathParser.normalize (WindowsPathParser.java:182)
    at sun.nio.fs.WindowsPathParser.parse (WindowsPathParser.java:153)
    at sun.nio.fs.WindowsPathParser.parse (WindowsPathParser.java:77)
    at sun.nio.fs.WindowsPath.parse (WindowsPath.java:94)
    at sun.nio.fs.WindowsFileSystem.getPath (WindowsFileSystem.java:255)
    at java.nio.file.Paths.get (Paths.java:84)
    at org.openapitools.codegen.DefaultGenerator.generateModels (DefaultGenerator.java:441)
    at org.openapitools.codegen.DefaultGenerator.generate (DefaultGenerator.java:875)
    ...//a lot of "at"
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)

在另一个 yaml 中定义的模型“DateTime”,与生成的 yaml 文件在同一目录中。

UPD。

在我的 pom.xml 文件中:

<plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <version>5.1.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${project.basedir}/src/main/resources/5g_specs/TS29508_Nsmf_EventExposure.yaml</inputSpec>
                            <generatorName>java</generatorName>
                            <apiPackage>generated.smf.api</apiPackage>
                            <modelPackage>generated.smf.model</modelPackage>
                            <invokerPackage>generated.smf.invoker</invokerPackage>
                            <configOptions>
                                <groupId>${project.groupId}</groupId>
                                <artifactId>${project.artifactId}</artifactId>
                                <artifactVersion>${project.version}</artifactVersion>
                                <library>okhttp-gson</library>
                                <skipValidateSpec>false</skipValidateSpec>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

UPD2

在主 yaml 中的引用:

EventNotification:
  type: object
  properties:
    event:
      $ref: '#/components/schemas/SmfEvent'
    timeStamp:
      $ref: 'TS29571_CommonData.yaml#/components/schemas/DateTime'
    //and a lot of other properties

在 CommonData 中,它看起来像这样:

#
# COMMON SIMPLE DATA TYPES
#
...
    DateTime:
      format: date-time
      type: string

我找到了解决这个问题的方法。我没有使用最新的 5.1.0 版本的插件,而是使用 4.3.1 版本,我没有这个问题。 5.x 版本不支持继承(我有 INFO 日志:

[deprecated] inheritance without use of 'discriminator.propertyName' has been deprecated in the 5.x release. Composed schema name: null. Title: null

但我需要使用最新版本。那么有没有其他方法可以解决这个问题?

解决方法

我遇到了类似的问题。为了解决这个问题,我在 configOptions 中添加了 dateLibrary 作为 joda。还添加了joda-time的依赖。

<configOptions>
    <dateLibrary>joda</dateLibrary>
    <java8>true</java8>
    <interfaceOnly>false</interfaceOnly>
    <delegatePattern>false</delegatePattern>
    <sourceFolder>./</sourceFolder>
</configOptions>
,

尝试将组件“DateTime”的名称更改为其他名称。我认为这是一代或某事时的命名冲突。至少,它用完全相同的轨迹解决了我的问题。

以防万一:

<configOptions>
        <dateLibrary>java8-localdatetime</dateLibrary>
        <interfaceOnly>true</interfaceOnly>
</configOptions>

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