簡體   English   中英

Swagger中的@BeanParam與Resteasy 3.0和Wildfly 8.0

[英]@BeanParam in Swagger with Resteasy 3.0 and Wildfly 8.0

我正在嘗試使用Swagger記錄我的Rest API。 . 我想使用@BeanParam批注,但是Swagger將Bean模型解釋為單個 but that made Wildfly unable to start cause of WELD-001408 error (as in first link below). 我已將swagger依賴項更改為但這使Wildfly無法啟動導致WELD-001408錯誤的原因(如下面的第一個鏈接所示)。 我讀了很多東西,但是似乎沒有什么能解決我的問題:

我嘗試通過根據鏈接的線程更改pom.xml中的依賴項,現在看起來像這樣:

<dependency>
        <groupId>com.wordnik</groupId>
        <artifactId>swagger-annotations</artifactId>
        <version>1.3.12</version>
    </dependency>
    <dependency>
        <groupId>com.wordnik</groupId>
        <artifactId>swagger-core_2.10</artifactId>
        <version>1.3.12</version>
    </dependency>
    <dependency>
        <groupId>com.wordnik</groupId>
        <artifactId>swagger-jersey2-jaxrs_2.10</artifactId>
        <version>1.3.12</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers.glassfish</groupId>
        <artifactId>jersey-gf-cdi</artifactId>
        <version>2.14</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.14</version>
    </dependency>

此外,我為Swagger提供了一個自定義servlet:

public class SwaggerServlet extends HttpServlet {
    private static final long serialVersionUID = 4104485315753399385L;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);

        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion("1.0.2");
        beanConfig.setBasePath("/CityAlertsWeb/service");
        beanConfig.setResourcePackage("pl.cityalerts.web.controllers");
        beanConfig.setScan(true);
        ClassReaders.setReader(new JerseyApiReader());
    }
}

有什么辦法可以讓RestBean在Swagger中使用@BeanParam? 我應該添加任何其他依賴嗎?

通過這樣的配置,我得到:

...
Caused by: java.lang.RuntimeException: Unable to instantiate ContextResolver
at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1607)
at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1310)
at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1232)
at org.jboss.resteasy.spi.ResteasyDeployment.registerProvider(ResteasyDeployment.java:531)
at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:338)
at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:241)
at org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap.contextInitialized(ResteasyBootstrap.java:28)
at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173)
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:187)
... 7 more
Caused by: java.lang.IllegalArgumentException: Unable to find a public constructor for provider class org.glassfish.jersey.media.multipart.MultiPartProperties$Feature$MultiPartContextResolver
at org.jboss.resteasy.spi.ResteasyProviderFactory.createConstructorInjector(ResteasyProviderFactory.java:2184)
at org.jboss.resteasy.spi.ResteasyProviderFactory.createProviderInstance(ResteasyProviderFactory.java:2173)
at org.jboss.resteasy.spi.ResteasyProviderFactory.addContextResolver(ResteasyProviderFactory.java:1072)
at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1601)
... 15 more

謝謝

盡管RESTEasy 3.X大約在一年半之前已正式發布,但至少在我們的經驗中,它還是相當罕見的。

Swagger-core具有多種功能,例如Play模塊,Servlet和JAX-RS。 對於JAX-RS,JAX-RS 1.X有一個基本的JAX-RS實現,然后還有Jersey 1.X和Jersey 2.X的特定實現。

Jersey 1.X和2.X實現在那些庫中支持文​​件上載,因為不幸的是,文件上載不是JAX-RS規范的一部分,並且最終是特定於實現的。

但是,Jersey 2.X特定實現中的另一個區別是對JAX-RS 2.0的支持,其中包括@BeanParam支持。 目前,沒有通用的JAX-RS 2.0模塊。

從原始鏈接來看,似乎JBoss / WildFly與加載Jersey依賴項之間存在沖突,Jersey 2.X風格引入了該依賴項。基於注釋中的交互,解決方案是排除( <exclusion> )組織.glassfish.jersey.media:jersey-media-multipart依賴項(確實是文件上載支持的依賴項),然后將其手動添加到主pom.xml中。 雖然這不是一個優雅的解決方案,但它可以作為解決方法。

我還建議在swagger-core存儲庫中打開有關此問題的信息。 我認為隨着時間的推移,JAX-RS 2.0的采用將不斷增長,我們應該給予適當的支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM