Search code examples
javamaventomcatjerseyjax-rs

JAX-RS REST is working at WildFly but not working at Tomcat


I developed simple REST API - https://github.com/pavelpetrcz/MandaysFigu - and my problem is that at localhost WildFly 16 server is app working properly. But I get error 404 at Tomcat 8.5.

This is my console when I ran app at Tomcat at localhost:

Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat/8.5.41
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          May 4 2019 09:17:16 UTC
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         8.5.41.0
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Windows 10
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            10.0
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             C:\Program Files\Java\jdk1.8.0_211\jre
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_211-b12
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         C:\Osobni\tomcat8_5
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         C:\Osobni\tomcat8_5
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=C:\Osobni\tomcat8_5
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=C:\Osobni\tomcat8_5
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dwtp.deploy=C:\Osobni\tomcat8_5\wtpwebapps
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=C:\Osobni\tomcat8_5\endorsed
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dfile.encoding=Cp1250
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_211\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jdk1.8.0_211/bin/../jre/bin/server;C:/Program Files/Java/jdk1.8.0_211/bin/../jre/bin;C:/Program Files/Java/jdk1.8.0_211/bin/../jre/lib/amd64;C:\Osobni\oracleDbXe\dbhomeXE\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\TortoiseGit\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Java\jdk1.8.0_211\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Git\cmd;C:\Users\pavel\AppData\Local\Programs\Python\Python37-32\Scripts\;C:\Users\pavel\AppData\Local\Programs\Python\Python37-32\;C:\Users\pavel\AppData\Local\Microsoft\WindowsApps;C:\Program Files\heroku\bin;C:\Users\pavel\AppData\Local\atom\bin;C:\Osobni\software\eclipse-jee-2019-03-R-win32-x86_64\eclipse;;.]
Zář 09, 2019 12:37:57 ODP. org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Zář 09, 2019 12:37:57 ODP. org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Zář 09, 2019 12:37:57 ODP. org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Zář 09, 2019 12:37:57 ODP. org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 723 ms
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Catalina]
Zář 09, 2019 12:37:57 ODP. org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.5.41
Zář 09, 2019 12:37:59 ODP. org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Zář 09, 2019 12:37:59 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory [C:\Osobni\tomcat8_5\webapps\docs]
Zář 09, 2019 12:37:59 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory [C:\Osobni\tomcat8_5\webapps\docs] has finished in [19] ms
Zář 09, 2019 12:37:59 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory [C:\Osobni\tomcat8_5\webapps\examples]
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('StockTicker', 'async.Stockticker@6837a549')
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory [C:\Osobni\tomcat8_5\webapps\examples] has finished in [995] ms
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory [C:\Osobni\tomcat8_5\webapps\host-manager]
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory [C:\Osobni\tomcat8_5\webapps\host-manager] has finished in [28] ms
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory [C:\Osobni\tomcat8_5\webapps\manager]
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory [C:\Osobni\tomcat8_5\webapps\manager] has finished in [26] ms
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory [C:\Osobni\tomcat8_5\webapps\ROOT]
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory [C:\Osobni\tomcat8_5\webapps\ROOT] has finished in [21] ms
Zář 09, 2019 12:38:00 ODP. org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Zář 09, 2019 12:38:00 ODP. org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Zář 09, 2019 12:38:00 ODP. org.apache.catalina.startup.Catalina start
INFO: Server startup in 3064 ms


My colleague helped me and explained me that I have to add to my POM file dependency at some implementation for JAX RS which was initially missing. So I added:

<dependency>
    <groupId>org.glassfish.jersey.bundles</groupId>
    <artifactId>jaxrs-ri</artifactId>
    <version>2.29</version>
    <scope>provided</scope>
</dependency>

Afterwards it still works at WildFly but does not work at Tomcat. I think I should maybe add some other implementation of other JEE standards.

I expect, that I can run my app at Tomcat 8.5 as well as at WildFly and could publish that app at Heroku.

Could anybody help me to figure out what I should do next?


Solution

  • Tomcat is java web server (Servlet/JSP container). Is not a JEE server with all the complete functionalities like WildFly, WAS Liberty, Glassfish,...

    The dependency org.glassfish.jersey.bundles:jaxrs-ri is marked as provided. This means that maven asumes that the dependency is already in your runtime environment and is not added to the package. This is true in WildFly that contains JAX-RS implementation but Tomcat misses it and is required to be added as a dependency, removing the scope provided uses the default scope and is added to the package, but this could make conflicts with the WildFly implementation (check it).

    Other option is add the dependency in Tomcat as server library in the endorsed libraries to stay available on any time.