[英]@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.