Forum Discussion

shresthahazra92's avatar
shresthahazra92
Occasional Visitor
2 years ago

Not able to configure swagger with jax-rs webservices

Hi,

I had some experience with swagger and configured swagger very easily in one of my project which was in springboot.
But I need to configure swagger to a project where all the APIs/ webservices are written with jersey APIs (javax.ws.rs) (version 1.1.1)
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>

Link from where code is referred: https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-1.X-Project-Setup-1.5

Method I used in the current code:  Using a custom Application subclass

Error I am getting:

[WARNING[m] FAILED Jersey Spring Web Application: java.lang.NoSuchMethodError: org.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection;
[WARNING[m] FAILED JettyWebAppContext@132e3594@132e3594/TalisSOA-2.9.32-SNAPSHOT,file:/C:/Dev/ws/git-projects/development-environment/talissoaframework/dist/TalisSOA/target/tmp/webapp/,C:\Dev\ws\git-projects\development-environment\talissoaframework\dist\TalisSOA\target\TalisSOA-2.9.32-SNAPSHOT.war: java.lang.NoSuchMethodError: org.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection;
[WARNING[m] FAILED ContextHandlerCollection@644e9953: java.lang.NoSuchMethodError: org.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection;
[WARNING[m] FAILED HandlerCollection@4115b8a7: java.lang.NoSuchMethodError: org.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection;
[[1;31mERROR[m] Error starting handlers
[1;31mjava.lang.NoSuchMethodError[m: [1;31morg.reflections.util.ClasspathHelper.forPackage(Ljava/lang/String;[Ljava/lang/ClassLoader;)Ljava/util/Collection;[m
     io.swagger.jaxrs.config.BeanConfig.classes ([1mBeanConfig.java:197[m)
     io.swagger.jaxrs.config.BeanConfig.setScan ([1mBeanConfig.java:170[m)
     com.talis.soa.jersey.SwaggerApplication.<init> ([1mSwaggerApplication.java:20[m)
     sun.reflect.NativeConstructorAccessorImpl.newInstance0 ([1mNative Method[m)
     sun.reflect.NativeConstructorAccessorImpl.newInstance ([1mNativeConstructorAccessorImpl.java:62[m)
     sun.reflect.DelegatingConstructorAccessorImpl.newInstance ([1mDelegatingConstructorAccessorImpl.java:45[m)
     java.lang.reflect.Constructor.newInstance ([1mConstructor.java:423[m)
     java.lang.Class.newInstance ([1mClass.java:442[m)
     com.sun.jersey.core.spi.component.ComponentConstructor._getInstance ([1mComponentConstructor.java:193[m)
     com.sun.jersey.core.spi.component.ComponentConstructor.getInstance ([1mComponentConstructor.java:180[m)
     com.sun.jersey.core.spi.component.ProviderFactory.__getComponentProvider ([1mProviderFactory.java:166[m)
     com.sun.jersey.core.spi.component.ProviderFactory._getComponentProvider ([1mProviderFactory.java:159[m)
     com.sun.jersey.core.spi.component.ioc.IoCProviderFactory._getComponentProvider ([1mIoCProviderFactory.java:116[m)
     com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider ([1mProviderFactory.java:153[m)
     com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init> ([1mDeferredResourceConfig.java:86[m)
     com.sun.jersey.server.impl.application.DeferredResourceConfig$ApplicationHolder.<init> ([1mDeferredResourceConfig.java:79[m)
     com.sun.jersey.server.impl.application.DeferredResourceConfig.getApplication ([1mDeferredResourceConfig.java:76[m)
     com.sun.jersey.server.impl.application.WebApplicationImpl._initiate ([1mWebApplicationImpl.java:1164[m)
     com.sun.jersey.server.impl.application.WebApplicationImpl.access$700 ([1mWebApplicationImpl.java:180[m)
     com.sun.jersey.server.impl.application.WebApplicationImpl$13.f ([1mWebApplicationImpl.java:799[m)
     com.sun.jersey.server.impl.application.WebApplicationImpl$13.f ([1mWebApplicationImpl.java:795[m)
     com.sun.jersey.spi.inject.Errors.processWithErrors ([1mErrors.java:193[m)
     com.sun.jersey.server.impl.application.WebApplicationImpl.initiate ([1mWebApplicationImpl.java:795[m)
     com.sun.jersey.spi.spring.container.servlet.SpringServlet.initiate ([1mSpringServlet.java:117[m)
     com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate ([1mServletContainer.java:339[m)
     com.sun.jersey.spi.container.servlet.WebComponent.load ([1mWebComponent.java:605[m)
     com.sun.jersey.spi.container.servlet.WebComponent.init ([1mWebComponent.java:207[m)
     com.sun.jersey.spi.container.servlet.ServletContainer.init ([1mServletContainer.java:394[m)
     com.talis.soa.jersey.CustomJerseyServlet.init ([1mCustomJerseyServlet.java:16[m)
     com.sun.jersey.spi.container.servlet.ServletContainer.init ([1mServletContainer.java:577[m)
     javax.servlet.GenericServlet.init ([1mGenericServlet.java:241[m)
     org.eclipse.jetty.servlet.ServletHolder.initServlet ([1mServletHolder.java:421[m)
     org.eclipse.jetty.servlet.ServletHolder.doStart ([1mServletHolder.java:245[m)
     org.eclipse.jetty.util.component.AbstractLifeCycle.start ([1mAbstractLifeCycle.java:55[m)
     org.eclipse.jetty.servlet.ServletHandler.initialize ([1mServletHandler.java:699[m)
     org.eclipse.jetty.servlet.ServletContextHandler.startContext ([1mServletContextHandler.java:193[m)
     org.eclipse.jetty.webapp.WebAppContext.startContext ([1mWebAppContext.java:978[m)
     org.eclipse.jetty.server.handler.ContextHandler.doStart ([1mContextHandler.java:586[m)
     org.eclipse.jetty.webapp.WebAppContext.doStart ([1mWebAppContext.java:349[m)
     org.mortbay.jetty.plugin.JettyWebAppContext.doStart ([1mJettyWebAppContext.java:102[m)
     org.eclipse.jetty.util.component.AbstractLifeCycle.start ([1mAbstractLifeCycle.java:55[m)
     org.eclipse.jetty.server.handler.HandlerCollection.doStart ([1mHandlerCollection.java:165[m)
     org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart ([1mContextHandlerCollection.java:162[m)
     org.eclipse.jetty.util.component.AbstractLifeCycle.start ([1mAbstractLifeCycle.java:55[m)
     org.eclipse.jetty.server.handler.HandlerCollection.doStart ([1mHandlerCollection.java:165[m)
     org.eclipse.jetty.util.component.AbstractLifeCycle.start ([1mAbstractLifeCycle.java:55[m)
     org.eclipse.jetty.server.handler.HandlerWrapper.doStart ([1mHandlerWrapper.java:92[m)
     org.eclipse.jetty.server.Server.doStart ([1mServer.java:228[m)
     org.mortbay.jetty.plugin.JettyServer.doStart ([1mJettyServer.java:69[m)
     org.eclipse.jetty.util.component.AbstractLifeCycle.start ([1mAbstractLifeCycle.java:55[m)
     org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty ([1mAbstractJettyMojo.java:433[m)
     org.mortbay.jetty.plugin.AbstractJettyMojo.execute ([1mAbstractJettyMojo.java:377[m)
     org.mortbay.jetty.plugin.JettyRunWarMojo.execute ([1mJettyRunWarMojo.java:68[m)
     org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo ([1mDefaultBuildPluginManager.java:137[m)
     org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 ([1mMojoExecutor.java:370[m)
     org.apache.maven.lifecycle.internal.MojoExecutor.doExecute ([1mMojoExecutor.java:351[m)
     org.apache.maven.lifecycle.internal.MojoExecutor.execute ([1mMojoExecutor.java:215[m)
     org.apache.maven.lifecycle.internal.MojoExecutor.execute ([1mMojoExecutor.java:171[m)
     org.apache.maven.lifecycle.internal.MojoExecutor.execute ([1mMojoExecutor.java:163[m)
     org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject ([1mLifecycleModuleBuilder.java:117[m)
     org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject ([1mLifecycleModuleBuilder.java:81[m)
     org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build ([1mSingleThreadedBuilder.java:56[m)
     org.apache.maven.lifecycle.internal.LifecycleStarter.execute ([1mLifecycleStarter.java:128[m)
     org.apache.maven.DefaultMaven.doExecute ([1mDefaultMaven.java:294[m)
     org.apache.maven.DefaultMaven.doExecute ([1mDefaultMaven.java:192[m)
     org.apache.maven.DefaultMaven.execute ([1mDefaultMaven.java:105[m)
     org.apache.maven.cli.MavenCli.execute ([1mMavenCli.java:960[m)
     org.apache.maven.cli.MavenCli.doMain ([1mMavenCli.java:293[m)
     org.apache.maven.cli.MavenCli.main ([1mMavenCli.java:196[m)
     sun.reflect.NativeMethodAccessorImpl.invoke0 ([1mNative Method[m)
     sun.reflect.NativeMethodAccessorImpl.invoke ([1mNativeMethodAccessorImpl.java:62[m)
     sun.reflect.DelegatingMethodAccessorImpl.invoke ([1mDelegatingMethodAccessorImpl.java:43[m)
     java.lang.reflect.Method.invoke ([1mMethod.java:498[m)
     org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced ([1mLauncher.java:282[m)
     org.codehaus.plexus.classworlds.launcher.Launcher.launch ([1mLauncher.java:225[m)
     org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode ([1mLauncher.java:406[m)
     org.codehaus.plexus.classworlds.launcher.Launcher.main ([1mLauncher.java:347[m)


I tried upgrading the swagger-core version from 1.5.0 to 1.5.6 but no luck. 

I searched about this error and found out this google chat group : https://groups.google.com/g/swagger-swaggersocket/c/ZtNe0v4S6DA and followed all the steps. But still same issue.
Can someone please help?

web.xml: 
<servlet>
<servlet-name>Jersey Spring Web Application</servlet-name>
<servlet-class>com.talis.soa.jersey.CustomJerseyServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.talis.soa.jersey.SwaggerApplication</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
<!-- Jackson mapping -->
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>org.codehaus.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Jersey Spring Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

pom.xml

<!-- Swagger dependencies -->
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-jaxrs</artifactId>
    <version>${swagger.version}</version> //swagger.version is 1.5.6
    <exclusions> //Even after removing this exclusion, same exception 
            <exclusion>
                <groupId>org.reflections</groupId>
                    <artifactId>reflections</artifactId> 
                </exclusion>
            </exclusions>
</dependency>
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>${swagger.version}</version>
</dependency>
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-core</artifactId>
    <version>${swagger.version}</version>
</dependency>
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-jersey-jaxrs</artifactId>
    <version>${swagger.version}</version>
</dependency>
<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-models</artifactId>
    <version>${swagger.version}</version>
</dependency>


custom application class:

package com.talis.soa.jersey;
 
import io.swagger.jaxrs.config.BeanConfig;
 
import java.util.HashSet;
import java.util.Set;
 
import javax.ws.rs.core.Application;
 
import com.talis.soa.BusinessServices.jersey.framework.common.ReleaseInfoJersey;
 
public class SwaggerApplication extends Application {
public SwaggerApplication() {
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("1.0");
beanConfig.setSchemes(new String[]{"http"});
beanConfig.setHost("localhost:8080");
beanConfig.setBasePath("/TestSwagger");
beanConfig.setResourcePackage("com.talis.soa.BusinessServices.jersey.framework.common");
beanConfig.setScan(true);
}
 
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
 
classes.add(ReleaseInfoJersey.class);
 
classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
 
return classes;
}
}


Class where webservice is written:


@Path("/services/release-info")
Singleton
public class ReleaseInfoJersey {

private ReleaseInfoService releaseInfoService;

/**
* @return the releaseInfoService
*/
public ReleaseInfoService getReleaseInfoService() {
return releaseInfoService;
}

/**
* Param releaseInfoService the releaseInfoService to set
*/
public void setReleaseInfoService(ReleaseInfoService releaseInfoService) {
this.releaseInfoService = releaseInfoService;
}

/**
* Release info Jersey method wrapper.
* @return release info
* @throws BusinessServicesException
*/
@RESTDoc("This service returns release info values.")
@GET
@ApiOperation(value = "Get Release info")
@Produces({"application/xml","text/xml","application/json"})
public ReleaseInfo releaseInfo() throws BusinessServicesException {

return releaseInfoService.getReleaseInfo();
}


}



No RepliesBe the first to reply