对不起这个直言不讳的问题。但是很多人日复一日地使用这两个术语但我不知道。我做了一些关于这个的研究并且知道它是分开的。但不明白它是如何相关的。我将首先分享我对这两者的理解。
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是界面的实现。
现在请说明我的理解是否正确。然后告诉他们如何相关。请帮忙 。如果可能的话,图片说明会更有帮助。
答案 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;
}
}