21

对不起这个直率的问题。但是许多人日复一日地使用这两个术语,但我不知道。我对此进行了一些研究,并分别知道它是什么。但不明白它是如何相关的。我将首先分享我对这两个的理解。

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

xsd:字符串 java.lang.String

xsd:整数 java.math.BigInteger

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

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

4

1 回答 1

21

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

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

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

例子

在以下示例中,当GET执行操作时,JAX-RS 实现将返回一个Customer. JAXB 实现将用于将该实例转换Customer为客户端实际接收的 XML。

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@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;
     }

}
于 2013-07-31T21:09:28.267 回答