JAX-RS Implementations
Jersey
- Reference Implementation
- Usually the most cutting edge
- Supports true asynchronous (ie web sockets etc...) connections through either Atmosphere or 2.0 version.
- Has support for Spring and standard injection containers (ie @Inject).
- Glassfish bundles it.
- Its much more modular than the other JAX-RS projects.
- It has a kick ass URI Builder
- Does not necessarily require servlet container.
- Grizzly support
- Netty support (very early).
- Swagger support
- Sort of missing OAuth 2.0 . You'll have to use other libraries.
- Some MVC support through Viewables
- Hosted on java.net (a minus as the site is terribly slow at times).
- Licensing is based on CCDL 1.1 and GPL-v2. Please make sure you check Jersey licensing before you use it for commercial use
https://jersey.github.io/license.html
RestEasy
Apache Wink (never used it)
- I have no idea why this project exists.
- Supposedly its high performance focused.
- It has a client built on top of HttpUrlConnection (which is a minus... it should be pluggable like Spring RestTemplate).
- Basically Wink was developed in house at some enterprise companies and then given to Apache.
- Requires a servlet container.
Restlet
- Very powerful but very complicated
- Provides some low-level REST support
- Does not require a servlet container
Apache CXF
- Some interesting WADL support.
- Reuse and or combine JAX-RS w/ JAX-WS
- Security support
- Integration w/ Spring albeit kind of nasty
- Supposed Autogeneration of client stubs
Other RPC-like systems
Message Queues
Asynchronous RPC
My humble opinion
I know the OP asked for REST but if this is for internal communication seriously consider using either a message queue or some other asynchronous RPC (Finagle) instead of traditional REST if your requirements match those systems.
If it must be classic HTTP REST (external) I would choose between either RestEasy or Jersey as a bulk of the mind share is put into those two projects.
Also see: Rest clients for Java?