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

时间:2013-07-31 20:42:16

标签: jaxb jax-rs resteasy restlet xml-binding

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

  

JAXB是支持转换的XML到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“)”意味着处理一个get   用url / foo打电话。它只说明了这一点。怎么做的?对,就那个   被称为此规范的实现。有很多   像restlet,resteasy,jersey,apache cxf等实现。   这类似于逻辑和你在数学中实现的方式。该   算法思想是桶搜索。这可以以任何方式实现。   在java术语中,JaxRs是接口,这4个restlet,resteasy,   jersey,apache cxf是界面的实现。

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

1 个答案:

答案 0 :(得分:18)

您的理解基本上是正确的。 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实现将返回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;
     }

}