JBoss-Swagger for Java Guice上的部署错误

JBoss-Swagger for Java Guice上的部署错误,java,rest,guice,swagger,jersey-1.0,Java,Rest,Guice,Swagger,Jersey 1.0,我正在尝试将Swagger与Java REST服务集成以生成文档。我正在使用Jersey-guice作为REST服务的依赖注入。泽西的版本是1.18.2。我正在使用JBoss5.1.2进行部署。 我们的设置与示例项目略有不同。我们将Jersey用作侦听器,而不是servlet。 我的web.xml如下所示- com.mitchell.services.estimatehelper.ioc.GuiceServletConfig guiceFilter com.google.inject.se

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

com.mitchell.services.estimatehelper.ioc.GuiceServletConfig


guiceFilter
com.google.inject.servlet.GuiceFilter
guiceFilter
/*
我有一个这样的GuiceServletConfig-

com.mitchell.services.estimatehelper.ioc.GuiceServletConfig


guiceFilter
com.google.inject.servlet.GuiceFilter
guiceFilter
/*
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);
}
protectedvoid-configureServlets(){
bind(ServletContainer.class).in(Singleton.class);
final Map params=new HashMap();
params.put(“com.sun.jersey.api.json.POJOMappingFeature”,“true”);
put(“javax.ws.rs.Application”,Application.class.getName());
参数put(“jersey.config.server.wadl.disableWadl”,“true”);
ReflectiveJaxrScanner scanner=新的ReflectiveJaxrScanner();
scanner.setResourcePackage(getClass().getPackage().getName());
扫描仪工厂。设置扫描仪(扫描仪);
绑定(EstimateController.class);
绑定(EstimateHelper.class)
.to(估计帮助示例类);
使用(GuiceContainer.class,params)提供(“/*”);
}
}

当我尝试部署它时,扫描器抛出一个下面的异常

2014-12-22 12:58:40573错误[STDERR](RMI TCP连接(2)-127.0.0.1)SLF4J:SLF4J api 1.6.x(或更高版本)与此绑定不兼容。 2014-12-22 12:58:40573错误[STDERR](RMI TCP连接(2)-127.0.0.1)SLF4J:您的绑定版本为1.5.5或更低版本。 2014-12-22 12:58:40573错误[STDERR](RMI TCP连接(2)-127.0.0.1)SLF4J:将绑定升级到1.6.x版。或2.0.x 2014-12-22 12:58:40573错误[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.performinization上(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.reflectivejaxrscanner.(reflectivejaxrscanner.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

检查应用程序是否存在依赖项

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

如果您使用的是maven,那么可以使用
mvn dependency:list
查看有效的依赖项,并使用
mvn Depdency:tree
查看旧版本中的哪些依赖项

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


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

谢谢!我正在使用maven,但是当我检查maven依赖项时,没有对SLF4J的依赖。我相信是JBoss依赖SLF4J。不确定是否可以为此做些什么。必须至少有一个SLF4J依赖项,因为swagger core将其拉入。
<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>
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);
}