1

对 maven swagger-codegen 插件使用以下配置:

        <plugin>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-codegen-maven-plugin</artifactId>
            <version>2.2.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${basedir}/src/main/resources/swagger.yaml</inputSpec>
                        <ignoreFileOverride>${basedir}/.swagger-codegen-ignore</ignoreFileOverride>
                        <language>jaxrs</language>
                        <library>jersey2</library>
                        <configOptions>
                            <sourceFolder>src/main/java</sourceFolder>
                            <apiPackage>com.github.jmccloskey.api</apiPackage>
                            <modelPackage>com.github.jmccloskey.model</modelPackage>
                            <invokerPackage>com.github.jmccloskey.invoker</invokerPackage>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

代码生成有效,但在生成的模型中使用 Java Date。从 swagger-codegen 文档中,可以通过在 configOptions 中添加以下内容来覆盖它以使用 JodaTime:

<dateLibrary>joda</dateLibrary>

这是我想要做的,但我得到一个编译失败:

.../JodaDateTimeProvider.java:[3,41] package com.sun.jersey.core.spi.component does not exist

我认为 spi 是 Jersey1 用于依赖注入,而 Jersey2 使用 hk2。

我能够通过将 jersey-bundle 添加到我的依赖项(以及其他一些,如 jettison、rome 和 javax.mail)来解决编译失败,但在我的 API 中存在运行时问题:

2. java.lang.IllegalStateException: Unable to perform operation: method inject on com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
3. java.lang.IllegalStateException: Unable to perform operation: create on org.glassfish.jersey.message.internal.MessageBodyFactory

混合 Jersey 1 依赖项不是正确的方法。有没有办法将 swagger-codegen maven 插件配置为使用 hk2 代替?

有关完整的示例项目,请参阅此github 存储库。任何正确方向的指针将不胜感激。

4

0 回答 0