【发布时间】:2015-02-25 23:45:08
【问题描述】:
我正在尝试使用 Swagger 来记录我的 Rest API。我想使用@BeanParam 注释,但是 Swagger 将 bean 模型解释为单个 body。我已将我的 swagger 依赖项更改为 swagger-jersey2-jaxrs_2.10 但这使得 Wildfly 无法启动导致 WELD-001408 错误的原因(如下面的第一个链接所示)。我读了很多东西,但似乎没有什么能解决我的问题:
- https://developer.jboss.org/thread/240847
- https://github.com/swagger-api/swagger-core/issues/446
- https://groups.google.com/forum/#!msg/swagger-swaggersocket/K5TFkxIcRQs/A34nupqPTTcJ
我已经尝试根据链接的线程更改我的 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());
}
}
有什么方法可以让@BeanParam 在带有 Resteasy 的 Swagger 中工作? 我应该添加任何其他依赖项吗?
有了这样的配置,我得到了:
...
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
谢谢
【问题讨论】:
-
您使用哪个版本的 swagger-core?另外,您是否尝试过从 swagger-jersey2-jaxrs 依赖项中排除 jersey2 依赖项?我想这会消除 WELD 错误。
-
我用的是最新的swagger(1.3.12)。我更新了上面的 pom.xml 片段。如何排除 jersey2? ?排除>
-
你需要删除这些:org.glassfish.jersey.media:jersey-media-multipart, org.glassfish.jersey.core:jersey-server, org.glassfish.jersey.core:jersey-客户端,org.glassfish.jersey.core:jersey-common,org.glassfish.jersey.containers:jersey-container-servlet-core。我不能保证它不会破坏任何东西,但这是一个开始。
-
这并不奇怪。现在是试错的时候了。带回那种依赖,把其余的排除在外。看看你是否会出现 WELD 错误或 CNFE 错误。冲洗,重复。
-
我删除了该排除项(org.glassfish.jersey.media:jersey-media-multipart)并将其添加为依赖项(LOL),它似乎开始工作了。希望以后不会有太大的破绽。您可以写一些东西作为答案,所以我可以接受它-> 15pts for You。非常感谢:D
标签: java maven resteasy wildfly swagger