JBoss-Swagger for Java Guice上的部署错误
我正在尝试将Swagger与Java REST服务集成以生成文档。我正在使用Jersey-guice作为REST服务的依赖注入。泽西的版本是1.18.2。我正在使用JBoss5.1.2进行部署。 我们的设置与示例项目略有不同。我们将Jersey用作侦听器,而不是servlet。 我的web.xml如下所示- com.mitchell.services.estimatehelper.ioc.GuiceServletConfigJBoss-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
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);
}