什么是JAXB和JAXRS?它们有什么关系?

Har*_*nam 17 jax-rs jaxb restlet xml-binding resteasy

对不起这个生硬的问题.但是很多人日复一日地使用这两个术语但我不知道.我做了一些关于这个的研究并且知道它是分开的.但不明白它是如何相关的.我将首先分享我对这两个的理解.

JAXB是XML-to-Java绑定技术,支持模式和Java对象之间以及XML实例文档和Java对象实例之间的转换.在内部,JAXB在xml和java之间进行所有这些转换.这是xml的解析器,然后它知道xml中的哪个组件对应于java中的内容并且它会中断.从JAXB转换此答案是通过xjc(或codgen插件)等工具完成的.映射可能就像

xsd:string java.lang.String

xsd:integer java.math.BigInteger

JaxRs与众不同.这是处理请求的一组规范.意思是它说"GET("/ foo")"意味着用url/foo处理一个get调用.它只说明了这一点.怎么做的?是的,这称为此规范的实现.有许多实现,如restlet,resteasy,jersey,apache cxf等.这类似于逻辑和你在数学中实现的方式.算法的想法是桶搜索.这可以以任何方式实现.在Java术语中,JaxRs是接口,这4个restlet,resteasy,jersey,apache cxf是接口的实现.

现在请说出我的理解是否正确.然后告诉他们如何相关.请帮忙 .如果可能,图片说明将更有帮助.

bdo*_*han 19

你的理解基本上是正确的.JAXB和JAX-RS都是具有多个实现的Java Community Process(JCP)标准.

JAXB - 定义用于将Java域对象转换为XML或从XML转换的标准化元数据和运行时API.

JAX-RS - 为创建RESTful服务定义标准化元数据和运行时API.默认情况下,application/xml媒体类型JAX-RS将使用JAXB将对象转换为XML或从XML转换对象.

在以下示例中,当GET执行操作时,JAX-RS实现将返回a 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;
     }

}
Run Code Online (Sandbox Code Playgroud)