Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Swagger with Jersey2.6 #888

Closed
vishakMetric opened this issue Mar 2, 2015 · 25 comments
Closed

Swagger with Jersey2.6 #888

vishakMetric opened this issue Mar 2, 2015 · 25 comments

Comments

@vishakMetric
Copy link

Hi,

I have been trying to integrate swagger-core for api generation with Jersey 2.6, but when i perform mvn:dependency the tree never shows that it requires 2.6 for any of these. Can you please guide with the necessary jars or correct artifact id. Please provide an example for the same.
I have used the below dependency

< groupId>com.wordnik</ groupId>
< artifactId>swagger-jersey2-jaxrs_2.10</ artifactId>
< version >1.3.12</ version>

@webron
Copy link
Contributor

webron commented Mar 2, 2015

Did you explicitly include jersey 2.6 in the pom?

@vishakMetric
Copy link
Author

yes. and also i have made sure to include them in lib folder of server (I use Tomcat6).

@webron
Copy link
Contributor

webron commented Mar 2, 2015

I'm not sure I follow the problem then. If the jersey 2 version from swagger-core overrides your own, just manually exclude it.

@vishakMetric
Copy link
Author

Please find the stacktrace below.
Mar 02, 2015 9:43:20 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: com/wordnik/swagger/jaxrs/listing/ApiDeclarationProvider
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1632)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:856)
at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840)
at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.(ResourceConfig.java:1171)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.(ResourceConfig.java:1144)
at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140)
at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:317)
at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:284)
at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:311)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:168)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.ClassNotFoundException: com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 51 more

Mar 02, 2015 9:43:20 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /metricstream threw load() exception
java.lang.ClassNotFoundException: com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1632)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:856)
at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840)
at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.(ResourceConfig.java:1171)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.(ResourceConfig.java:1144)
at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140)
at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:317)
at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:284)
at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:311)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:168)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

@webron
Copy link
Contributor

webron commented Mar 2, 2015

That's unrelated to Jersey. The Swagger dependency is not included in the application. Do you pack it in your jar/war with maven on top of including it in the lib of tomcat? What exactly have you included in your tomcat lib directory?

@vishakMetric
Copy link
Author

I'm including following jars
swagger-core_2.11-1.3.12.jar
swagger-jaxrs_2.11-1.3.12.jar
swagger-jersey2-jaxrs_2.11-1.3.12.jar
swagger-annotations-1.3.12.jar

@webron
Copy link
Contributor

webron commented Mar 2, 2015

Those are not enough.

Do you use maven at all or manually manage your dependencies?

@vishakMetric
Copy link
Author

Today is the first day of try on swagger so i manually copying it into the lib folder of the tomcat. Along with these
jersey-client-2.6.jar
jersey-common-2.6.jar
jersey-container-servlet-2.6.jar
jersey-container-servlet-core-2.6.jar
jersey-entity-filtering-2.6.jar
jersey-guava-2.6.jar
jersey-media-moxy-2.6.jar
jersey-media-multipart-2.6 and jersey-server-2.6 jar file

@webron
Copy link
Contributor

webron commented Mar 2, 2015

If you use maven (or any other dependency management system that uses maven's repositories), I'd strongly suggest using that instead of manually adding swagger-core to your application.

Otherwise, you'd have to use mvn dependency:list on the relevant project/dependency and see the (long) list of dependencies you need to ensure that are in your tomcat's shared directory. The list you shared doesn't cover it.

@fehguy
Copy link
Contributor

fehguy commented Mar 2, 2015

Please take a look at the dependencies in the sample project:

https://github.com/swagger-api/swagger-core/tree/master/samples/java-jersey2

@vishakMetric
Copy link
Author

I'm getting this message in the UI "Can't read from server. It may not have the appropriate access-control-origin settings.". I'm using Apache Tomcat 6.0.28.
Below are the HTTP headers
Accept application/json,application/json;charset="utf-8",/
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Host localhost:8002
Origin http://localhost:8080
Referer http://localhost:8080/swagger/
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

Can you please let me know why is this happening. Tomcat logs do not report any issues.

@fehguy
Copy link
Contributor

fehguy commented Mar 3, 2015

Have you followed the sample? What is the URL that you're putting in the UI? And what is your webroot?

@vishakMetric
Copy link
Author

Yes. Please find the web.xml configuration below
My context root will be: http://localhost:8080/swagger
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8002/api</param-value>
</init-param>
<init-param>
<param-name>swagger.filter</param-name>
<param-value>com.wordnik.swagger.sample.util.ApiAuthorizationFilterImpl</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
and in html file

window.swaggerUi = new SwaggerUi({
url: "http://localhost:8002/swagger/api/api-docs",
dom_id: "swagger-ui-container",
supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
onComplete: function(swaggerApi, swaggerUi){
log("Loaded SwaggerUI");

@fehguy
Copy link
Contributor

fehguy commented Mar 3, 2015

Then you should be pointing your UI to http://localhost:8080/swagger/api-docs from your configuration above. If you put that in a browser, what do you get?

@vishakMetric
Copy link
Author

Can't read swagger JSON from http://localhost:8080/swagger/api-docs

@fehguy
Copy link
Contributor

fehguy commented Mar 3, 2015

No put that in your browser, not the swagger-ui. I suggest you clone one of the samples directly and get familiar with the configuration process.

@vishakMetric
Copy link
Author

swagger

I get the above exception. I do not have JSON generated anywhere. I had cloned the sample above and trying to replicate it in my local tomcat.

@fehguy
Copy link
Contributor

fehguy commented Mar 3, 2015

I'm really trying to help, but I need to you to do what I'm asking. Put this DIRECTLY in your browser:

http://localhost:8080/swagger/api-docs

DO NOT put it in swagger-ui. Paste the output from the error message, NOT the swagger ui.

@vishakMetric
Copy link
Author

I get 404 error.

@fehguy
Copy link
Contributor

fehguy commented Mar 3, 2015

then swagger is not mounted on the context /swagger. You'll have to sort out where you've mounted it before anyone can help.

@vishakMetric
Copy link
Author

I'm working on windows OS and when i do http://localhost:8080/swagger/ and http://localhost:8080/swagger/swagger-ui.json it is producing the results.
I might be missing some minute thing which i'm not able to get.

@fehguy
Copy link
Contributor

fehguy commented Mar 3, 2015

The samples are here for you to follow so you can configure your system. Nobody can help without more information so please go back to the samples and diff your setup from them.

@fehguy fehguy closed this as completed Mar 3, 2015
@vishakMetric
Copy link
Author

Hi fehguy/webron,

I was able to fix the issue. Thanks for all help.

@MANIKUME24
Copy link

Hi Vishak,

Can you let us know how exactly you fixed this?

On Tuesday, March 3, 2015, vishakMetric notifications@github.com wrote:

Hi fehguy/webron,

I was able to fix the issue. Thanks for all help.


Reply to this email directly or view it on GitHub
#888 (comment)
.

Regards,
Manish Agrawal

@vishakMetric
Copy link
Author

Hi,
I had missed scala jars scala-library-2.11.1.jar and scala-xml_2.11-1.0.1.jar files, when i placed them it started working. But not sure how i missed them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants