【问题标题】:Error in deployment on JBoss - Swagger for Java Guice JerseyJBoss 上的部署错误 - Swagger for Java Guice Jersey
【发布时间】:2015-02-21 00:10:12
【问题描述】:

我正在尝试将 Swagger 与我的 Java REST 服务集成以生成文档。我正在为我的 REST 服务使用 Jersey - guice 和依赖注入。泽西版本是 1.18.2。我正在使用 JBOSS 5.1.2 进行部署。 我们的设置与示例项目略有不同。我们将 Jersey 用作侦听器而不是 servlet。 我的 web.xml 看起来像这样 -

com.mitchell.services.estimatehelper.ioc.GuiceServletConfig

<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我有一个这样的 GuiceServletConfig -

com.mitchell.services.estimatehelper.ioc.GuiceServletConfig

<filter>
    <filter-name>guiceFilter</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>guiceFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

AppInjector 如下 -

公共类 AppInjector 扩展 ServletModule{

protected void configureServlets() {

    bind(ServletContainer.class).in(Singleton.class);
    final Map<String, String> params = new HashMap<String, String>();
    params.put("com.sun.jersey.api.json.POJOMappingFeature", "true");

    params.put("javax.ws.rs.Application", Application.class.getName());
    params.put("jersey.config.server.wadl.disableWadl", "true");

    ReflectiveJaxrsScanner scanner = new ReflectiveJaxrsScanner();
    scanner.setResourcePackage(getClass().getPackage().getName());
    ScannerFactory.setScanner(scanner);

    bind(EstimateController.class);

    bind(EstimateHelper.class)
            .to(EstimateHelperImpl.class);

    serve("/*").with(GuiceContainer.class, params);
}

}

当我尝试部署它时,扫描器会抛出以下异常

2014-12-22 12:58:40,573 错误 [STDERR] (RMI TCP Connection(2)-127.0.0.1) SLF4J:slf4j-api 1.6.x(或更高版本)与此绑定不兼容。 2014-12-22 12:58:40,573 错误 [STDERR] (RMI TCP Connection(2)-127.0.0.1) SLF4J:您的绑定是 1.5.5 或更早版本。 2014-12-22 12:58:40,573 错误 [STDERR] (RMI TCP Connection(2)-127.0.0.1) SLF4J:将您的绑定升级到版本 1.6.x。或 2.0.x 2014-12-22 12:58:40,573 错误 [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/estimate-helper-rs-1.0.0]] (RMI TCP 连接( 2)-127.0.0.1) 向 com.mitchell.services.estimatehelper.ioc.GuiceServletConfig 类的侦听器实例发送上下文初始化事件的异常 java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; 在 org.slf4j.LoggerFactory.bind(LoggerFactory.java:128) 在 org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108) 在 org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:279) 在 org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252) 在 org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:265) 在 com.wordnik.swagger.jaxrs.config.ReflectiveJaxrsScanner.(ReflectiveJaxrsScanner.scala:21) 在 com.mitchell.services.estimatehelper.ioc.AppInjector.configureServlets(AppInjector.java:30) 在 com.google.inject.servlet.ServletModule.configure(ServletModule.java:53) 在 com.google.inject.AbstractModule.configure(AbstractModule.java:59) 在 com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223) 在 com.google.inject.spi.Elements.getElements(Elements.java:101) 在 com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133) 在 com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103) 在 com.google.inject.Guice.createInjector(Guice.java:95) 在 com.google.inject.Guice.createInjector(Guice.java:72) 在 com.google.inject.Guice.createInjector(Guice.java:62)

在进一步研究之后,我意识到这个错误是由于 JBoss 使用的日志库引起的。 错误是 向 com.mitchell.services.estimatehelper.ioc.GuiceServletConfig 类的侦听器实例发送上下文初始化事件的异常 java.lang.NoSuchMethodError:

有什么办法可以解决这个问题吗?请帮忙!!

谢谢, SDD

【问题讨论】:

    标签: java rest guice swagger jersey-1.0


    【解决方案1】:

    检查你的应用程序的依赖关系。

    Swagger-Core 使用 SLF4J 1.6.3,您似乎有一个依赖项将其覆盖到 1.5.5 或更低版本。

    如果您使用的是 maven,您可以使用 mvn dependency:list 查看有效的依赖关系,并使用 mvn depdendency:tree 查看旧版本中拉取的依赖关系。

    同样,如果您使用的是 maven,您可以使用 &lt;exclusions&gt; 从拉入的 SLF4J 依赖项中删除旧的依赖项,或者将依赖项显式添加到您自己的 pom.xml。

    如果您使用其他构建工具(gradle 等),我想他们有类似的帮助工具来查看旧版本 SLF4J 的来源。

    【讨论】:

    • 谢谢!我正在使用 maven,但是当我检查 maven 依赖项时,没有对 SLF4J 的依赖。我相信是 JBoss 依赖于 SLF4J。不确定是否可以为此做任何事情。
    • 必须至少有一个 SLF4J 依赖项,因为 swagger-core 将其引入。
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2012-07-21
    相关资源
    最近更新 更多