gpt4 book ai didi

rest - 什么是 jaxb 提供程序、jaxb 处理程序和 contextResolvers?

转载 作者:行者123 更新时间:2023-12-02 08:31:51 24 4
gpt4 key购买 nike

1) 什么是 JaxB 提供程序,它与 ContextResolver 相同吗?
2) 什么是 jaxb 处理程序?

我对这些术语非常迷茫。请用通俗易懂的语言回答。

这是书上的内容:

JAXB JAX-RS 处理程序

JAX-RS 规范要求实现自动支持使用 @XmlRootElement 或 @XmlType 注释的类以及包装在 javax.xml.bind.JAXBElement 实例中的对象的编码和解码。下面是一个使用前面定义的 Customer 类进行交互的示例:

@Path("/customers")
public class CustomerResource {

@GET
@Path("{id}")
@Produces("application/xml")
public Customer getCustomer(@PathParam("id") int id) {

Customer cust = findCustomer(id);
return cust;
}

@POST
@Consumes("application/xml")
public void createCustomer(Customer cust) {
...

}}

如您所见,一旦您将 JAXB 注释应用到 Java 类,就很容易在客户端和 Web 服务之间交换 XML 文档。内置的 JAXB 处理程序将为 application/xml、text/xml 或 application/*+xml 媒体类型处理任何带有 JAXB 注释的类。默认情况下,它们还将管理 JAXBContext 实例的创建和初始化。因为创建 JAXBContext 实例的成本可能很高,所以 JAX-RS 实现通常在它们第一次初始化后缓存它们。使用 ContextResolvers 管理您自己的 JAXBContexts

如果您已经熟悉 JAXB,您就会知道很多时候您需要以某种方式配置您的 JAXBContext 实例以获得您想要的输出。 JAX-RS 内置的 JAXB 提供程序允许您插入自己的 JAXBContext 实例。它的工作方式是您必须实现一个名为 javax.ws.rs.ext.ContextResolver 的类似工厂的接口(interface)来覆盖默认的 JAXBContext 创建:

public interface ContextResolver<T> {

T getContext(Class<?> type);
}

ContextResolvers are pluggable factories that create objects of a specific type, for a certain Java type, and for a specific media type. To plug in your own JAXBContext, you will have to implement this interface. Here’s an example of creating a specific JAXBContext for our Customer class:

@Provider
@Produces("application/xml")
public class CustomerResolver
implements ContextResolver<JAXBContext> {
private JAXBContext ctx;

public CustomerResolver() {
this.ctx = ...; // initialize it the way you want
}


public JAXBContext getContext(Class<?> type) {
if (type.equals(Customer.class)) {
return ctx;
} else {
return null;
}
}
}

最佳答案

JAXB 提供程序

JAXB 提供程序是 Java Architecture for XML Binding (JSR-222) 的实现。规范。该规范是通过 Java Community Process 创建的。它最初由 Sun Microsystems 领导,但现在由 Oracle 领导。该专家组的成员来自多种对象到 XML 技术(XMLBeans、EMF、TopLink OX 等)以及一些个人。需要 JAXB 实现才能通过测试兼容性工具包 (TCK)。下面是几个 JAXB 提供程序的链接:

上下文解析器

JAXB 是 JAX-RS 中默认的 object-to-XML 提供程序。默认情况下,它将根据 JAX-RS 注释方法的参数/返回类型(即使用 @GET 注释)创建一个 JAXBContext。然后它将拉入所有引用的类以生成元数据。有时这不会产生所有必需的元数据,您需要自己提供 JAXBContext。这可以通过 ContextResolver 来完成。

JAXB 处理程序

我不熟悉这个词。

关于rest - 什么是 jaxb 提供程序、jaxb 处理程序和 contextResolvers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com