由于缺少JerseyJaxrsConfig类,Jersey的Swagger设置失败

时间:2014-05-17 09:02:00

标签: jersey classnotfoundexception swagger

我想为Jersey REST API文档设置Swagger,所以我在github上遵循了这个指南:https://github.com/wordnik/swagger-core/wiki/Java-JAXRS-Quickstart

我在Pom.xml中添加了以下内容:

<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jersey-jaxrs_2.10</artifactId>
<version>1.3.0</version>
</dependency>

保存此文件后,maven下载了以下似乎正确的jar:

  • 招摇-球衣-jaxrs_2.10-1.3.0.jar
  • 招摇-jaxrs_2.10-1.3.0.jar
  • 招摇-core_2.10-1.3.0.jar

然后我可以使用@ Api,@ ApiOperation等创建一些注释。但配置尚未完成。

在我的Web.xml中,我需要指定一个额外的Servlet“JerseyJaxrsConfig”:

<servlet>
  <display-name>Rest Servlet</display-name>
  <servlet-name>RestServlet</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>com.myprojectapp.rest;com.wordnik.swagger.jersey.listing</param-value>
  </init-param>
  <init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
    <param- value>com.sun.jersey.api.container.filter.LoggingFilter;com.myprojectapp.authentication.SecurityFilter</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
  <servlet-name>JerseyJaxrsConfig</servlet-name>
  <servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
    <init-param>
      <param-name>api.version</param-name>
      <param-value>1.0.0</param-value>
    </init-param>
    <init-param>
      <param-name>swagger.api.basepath</param-name>
      <param-value>http://localhost:8002/MyProjectApp/api</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

如果我启动Tomcat 7,我会收到以下ClassNotFoundException:

  

严重:Servlet / MyProjectApp抛出了load()异常   java.lang.ClassNotFoundException: com.wordnik.swagger.jersey.config.JerseyJaxrsConfig       在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)       在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)       at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)       在org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)       at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)       在org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)       在org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)       在org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)       在org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)       在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)       在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1559)       在org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)       at java.util.concurrent.FutureTask $ Sync.innerRun(Unknown Source)       at java.util.concurrent.FutureTask.run(Unknown Source)       at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)       在java.lang.Thread.run(未知来源)

奇怪的是,servlet类“JerseyJaxrsConfig”已经存在于最近下载的三个jar文件之一中。因此,当我输入com.wordnik.swagger.jersey.config时,Eclipse可以使用此类提出建议。但Tomcat无法在启动时找到它。为什么?如果我在Web.xml中注释掉servlet“JerseyJaxrsConfig”,那么Tomcat运行时没有错误。我尝试了一些事情,例如禁用我的Quartz Job,它以Tomcat开头,尝试使用其他的swagger版本或在Web.xml中添加其他设置但没有成功。

我的环境如下   - 带Maven的Eclipse   - 泽西岛1.81.1   - Java EE 7   - Tomcat 7   - Swagger 1.3

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以在运行Tomcat时添加没有编译时错误但运行时错误的注释的原因可能是因为jar存在于项目类路径中,但在WebContent / WEB-INF / lib目录中缺少

将罐子复制到该目录,它可能会起作用。祝好运! :)

答案 1 :(得分:0)

确保添加这些库:

swagger-annotations-1.3.10.jar
swagger-core_2.10-1.3.10.jar
swagger-jaxrs_2.10-1.3.10.jar
swagger-jersey2-jaxrs_2.10-1.3.10.jar

你应该拥有指定版本的所有四个罐子。