During the Kernel call this past Tuesday, we talked about attempting an isolated transition of AAA restful web services from Jersey 1 to Jersey 2. I attempted this change yesterday, and was able to partially convert (I just temporarily removed non-essential code that would've required overhaul). However, when I compiled NETCONF next to test RESTCONF, I quickly realized that:
1) jersey-2.26 won't behave well, since it relies on javax.ws.rs-api 2.1 and jersey 1.17 relies on javax.ws.rs-api 2.0.1. This leads to a Uses constraint violation since the dependency is provided via two chains (and two different versions too!).
2) jersey-2.25 won't work for a similar reason. Even though it relies on the older javax.ws.rs-api 2.0.1 which is currently in place, jersey 1.17 repackages javax.ws.rs-api. This means that utilizing the off the shelf javax.ws.rs-api 2.0.1 causes another Uses constraint violation, since the dependency is provided via upstream properly and jersey 1.17 in a repackaged form.
I am starting to really agree with the sentiment that we should just stick to only one implementation across the board. Additionally, I believe that isolating this in an API (utility or not) will help the transition since there will be a single point to toggle the implementations. We may want to also discuss the drawbacks of jersey 2. Namely, it appears to require a ton of overhead dependencies and starts a bit slower in newer versions. Maybe that is fine, but we should fully understand the tradeoffs before investing more time. We should also settle on what the intended version should be for jersey 2 if we go that route, since jersey-2.26 is a lot different than even jersey-2.25.