Что такое JAXB и JAXRS? Как они связаны?
Извините за этот тупой вопрос. Но многие используют эти два термина каждый день, но я не знаю. Я изучал это и знал, что это отдельно. Но не понимаю, как это связано. Я расскажу, что я понял об этих двух первых.
JAXB - технология привязки XML-Java, позволяющая преобразовывать между схемой и объектами Java и между документами экземпляров XML и экземпляры объектов Java. Внутренне JAXB выполняет все эти преобразования между xml и java. Это синтаксический анализатор xml, а затем он знает, что компонент в xml соответствует тому, что в java и ломается. Преобразование этого ответа из JAXB осуществляется с помощью таких инструментов, как xjc (или плагин для кодирования). Отображение может выглядеть как
xsd: строка java.lang.String
xsd: integer java.math.BigInteger
JaxRs отличается. Это набор спецификаций для обработки Запросы. Это означает, что он говорит: "GET (" /foo ")" означает обращение к get вызовите url/foo. В нем говорится только об этом. Как это делается? Да, это называется реализацией этой спецификации. Существует ряд реализации, такие как restlet, resteasy, jersey, apache cxf и т.д. Это аналог логики и способа реализации в математике. Идея алгоритма - поиск в виде ведра. Это может быть реализовано любым способом. В java-терминах JaxRs является интерфейсом, и эти 4 рестарта, resteasy, jersey, apache cxf - это реализация интерфейса.
Теперь скажите, правильно ли я понимаю. Затем расскажите, как они связаны. Пожалуйста помоги. Если возможно, более полезное иллюстрированное объяснение будет более полезным.
Ответы
Ответ 1
Ваше понимание в основном правильное. JAXB и JAX-RS - это стандарты Java Community Process (JCP) с несколькими реализациями.
JAXB. Определяет стандартизованные метаданные и API времени выполнения для преобразования объектов домена Java в/из XML.
JAX-RS. Определяет стандартизованные метаданные и API времени выполнения для создания служб RESTful. По умолчанию для типа носителя application/xml
JAX-RS будет использовать JAXB для преобразования объектов в/из XML.
Пример
В следующем примере, когда выполняется операция GET
, реализация JAX-RS вернет Customer
. JAXB impl будет использоваться для преобразования этого экземпляра Customer
в XML, который клиент фактически получит.
package org.example.service;
import javax.ejb.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import org.example.model.*;
@Stateless
@LocalBean
@Path("/customers")
public class CustomerResource {
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") int id) {
Customer customer = new Customer();
customer.setId(id);
customer.setFirstName("Jane");
customer.setLastName(null);
PhoneNumber pn = new PhoneNumber();
pn.setType("work");
pn.setValue("5551111");
customer.getPhoneNumbers().add(pn);
return customer;
}
}