Open jerseyrobot opened 7 years ago
@pavelbucek Commented Hi @andriy-simonov,
thanks for filing the issue. I tried to reproduce locally (on glassfish built from the master branch) and I'm able to deploy and access your application:
$ glassfish/bin/asadmin start-domain
Waiting for domain1 to start .....
Successfully started the domain : domain1
domain Location: /Users/pavel/glassfish/github/main/appserver/distributions/glassfish/target/stage/glassfish5/glassfish/domains/domain1
Log File: > /Users/pavel/glassfish/github/main/appserver/distributions/glassfish/target/stage/glassfish5/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.
$ glassfish/bin/asadmin deploy ~/jersey/bugs/3564/simple-service-webapp/target/simple-service-webapp.war
Application deployed with name simple-service-webapp.
Command deploy executed successfully.
$ curl -vvv http://localhost:8080/simple-service-webapp/myresources/myresource
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> GET /simple-service-webapp/myresources/myresource HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: GlassFish Server Open Source Edition 5.0
< X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 5.0 Java/Oracle Corporation/1.8)
< Content-Type: text/plain
< Date: Tue, 30 May 2017 08:41:43 GMT
< Content-Length: 7
<
Got it!
The only issue I do see is that the example packs jersey into WEB-INF/lib, which is known to be problematic when the container already does have Jersey on classpath. I would suggest making the dependency provided:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<scope>provided</scope>
</dependency>
@andriy-simonov Commented
@pavelbucek Thank you for your reply. I tried to run the application with the dependency scope set to provided
(although I didn't hope it would help, as Jetty/Tomcat don't have any Jersey jars in their classpath) without any success. As glassfish is fully-fledged Java EE application server, there is some functionality that Jetty/Tomcat lack for them to work with this configuration I guess. However, as far as I understand the documentation promises that Jersey integrates with any Servlet containers supporting Servlet API 3.x, hence it still seems to me as a bug.
I deploy a simple application that I created from Jersey Maven Archetype. It has no javax.ws.rs.core.Application subclass and I configured it exactly as the 4.7.2.3.1. JAX-RS application without an Application subclass paragraph of the documentation said. So the web.xml is
and there is only one dependency in the pom.xml
However, when I package it to a war and deploy to Jetty 9.4 (supports Servlet API 3.1) I get
Additionally, I also tried to deploy on Tomcat 8.0.35 (supports Servlet API 3.1) and it deployed successfully, but complained when I actually requested a resource
Clone the project from my repository to reproduce the bug. It seems that Jersey (versions 2.25.1 and 2.26-b04) does not dynamically add a container Servlet as the documentation stated. (I also assume that the bug has something to do with #3517 because there is no servlet-class element in both cases).