JAX-RS по отношению к Джерси и JSRs


Я пытаюсь разобраться в некоторых концепциях Java:

  1. JSR (s): описывают спецификации, но не содержат фактических реализаций. Е. Г. http://jsr311.java.net/ является "домашним" для "API-интерфейса Java™ для веб-служб RESTful". Он служит общей ссылкой для всех реализаций JSR-311.
  2. можно скачать интерфейсы (?) JSR-311 из http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api , однако, если вы не реализуете JSR-311 с помощью сами они особой ценности не имеют?
  3. JSR (s) обычно/всегда будет иметь ссылочную реализацию. Чтобы найти его, вам придется поискать в google "JSR XXX reference implementation" или посмотреть домашнюю страницу спецификаций (например, http://jsr311.java.net/)
  4. для JSR-311 эта ссылочная реализация являетсяДжерси . Используя maven, вы можете получить сервер Джерси из http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 . так как Джерси обеспечивает реализацию согласно интерфейсам, найденным в http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api , Вам нужно только добавить Джерси в качестве зависимости в вашем проекте, а не сам jsr311-api. (это относится ко всем технологиям JSR?)
  5. положить оба http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api и http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 поскольку зависимости в вашем проекте, возможно, вызовут classpath проблемы?

Я полностью отключился или на что-то наткнулся?

2 9

2 ответа:

  1. Да, в этом нет ничего нового. Подумайте о JDBC, java предоставляет интерфейсы (Connection, Statement, ResultSet и т. д.), Но это вверх поставщикам баз данных для предоставления реализаций.

  2. Если вы используете реализацию JSR-311, такую как Jersey или Apache CXF затем вы будете аннотировать свои классы с помощью аннотаций javax.ws.rs, таких как@Path, @GET, @Produces и т.д. Вот почему вам нужно явно иметь JSR-311 в качестве зависимости maven.

  3. Да, обычно. Взгляните на эту картину. список JSR на wiki .

  4. Вам нужны как JSR, так и реализация. Аннотации находятся в JSR, реализация предоставляет вспомогательные классы, такие как com.sun.jersey.spi.container.servlet.ServletContainer.

  5. Нет, необходимо иметь обе зависимости (см. пункт 4); Вы не получите конфликтов путей к классам.

  1. -
  2. можно загружать файлы из различных источников. Чтобы получитьсамую официальную версию спецификацииJSR-311 , перейдите на страницу загрузкиJCP . Вполне возможно, что вы не можете получить файл JAR (со всеми интерфейсами и прочим) со страниц JCP, но все же это официальный источник. (Всегда есть хорошие PDF-файлы публичных проектов!)
  3. -
  4. Вы правы, потому что Джерси содержит API, определенный JSR-311, однако я бы добавил в компиляции зависимость к jsr311-АПИ jar-файл и добавить Джерси, как во время выполнения зависимость. Это создает хорошее разделение между API и реализацией, и вы можете поменять свою реализацию JSR-311 в любое время [sic]. Если вы собираетесь использовать Джерси Полностью, Включите только Джерси. Одной зависимостью меньше в вашем пом.
  5. Если Джерси упаковывает тот же API, что и JSR311-api JAR, он не будет. если он упаковывает что-то другое, Ну, это будет ужасно! Maven, вероятно, будет лаять во время компиляции, если у вас есть поврежденный API JSR-311 на его пути к классу (я уже видел много java.яз..ClassFormatError: отсутствует атрибут кода в методе that ... ошибки, так что это не останется незамеченным, это точно).
В остальном вы правы.