【问题标题】:How to specify and organize OXM_METADATA_SOURCE in glassfish v4 MOXy Provider?glassfish v4 MOXy Provider中如何指定和组织OXM_METADATA_SOURCE?
【发布时间】:2013-10-05 06:58:28
【问题描述】:

我是 Glassfish 和 MOXy 的粉丝,MOXy 已被捆绑到 Glassfish v4 中,这对我来说是个好消息。

我在互联网上阅读并尝试了一些 MOXy 示例,我喜欢动态 OXM_META_DATA_SOURCE 部分,因为在提供 RESTful 服务的同时,“客户端视角”比域类非常灵活。

那么问题来了:

不同的 RESTful 服务可以从相同的域类中获得不同的视图,在我的工作中这是很常见的情况。因此,每个服务都可能有很多绑定 OXM 元数据文件。我们知道,一个 OXM 元数据文件只能对应一个 java 包。所以会有更多的 OXM 元数据文件需要维护。

回到 JAX-RS,是否有任何框架来设计模式或最佳实践来完成 OXM 元数据文件集和服务本身之间的映射?

【问题讨论】:

  • 似乎更好更简单的解决方案是使用Transfer Object Java EE核心模式来解决域类的用例特定视图,然后使用MOXy将这些TO绑定到带有TO的JSON文本中JSON OXM_METADATA.
  • 至少JAX-RS提供了一些扩展点,比如Entity Providers:MessageBodyReader、MessageBodyWriter,或者Context Providers:ContextResolver,这些扩展点都是设计与此类提供者映射域或 TO Class
  • 我已请泽西队的某个人发布您的问题的答案。 JavaOne 上展示了一个实体过滤功能,该功能利用了可能适用于此处的 MOXy 的对象图(请参阅:blog.bdoughan.com/2013/03/…)。您可以使用以下链接查看 JAX-RS 和 JSON 绑定演讲的幻灯片:blog.bdoughan.com/2013/03/…

标签: jaxb jax-rs moxy glassfish-4


【解决方案1】:

您可以尝试在 Jersey 2.3 中引入的名为 Entity Filtering 的新功能。即使实体过滤不是基于OXM_META_DATA_SOURCE,您也可以通过它实现您的目标:

假设您有以下域类(注释是自定义实体过滤注释):

public class Project {

    private Long id;

    private String name;

    private String description;

    @ProjectDetailedView
    private List<Task> tasks;

    @ProjectAnotherDetailedView
    private List<User> users;

    // ...
}

当然还有一些 JAX-RS 资源,例如:

@Path("projects")
@Produces("application/json")
public class ProjectsResource {

    @GET
    @Path("{id}")
    public Project getProject(@PathParam("id") final Long id) {
        return ...;
    }

    // ...
}

现在,我们在域类(通过注释)和资源类上定义了 2 个详细视图。如果你注释getProject资源方法:

  • @ProjectDetailedView - 返回的实体将包含 idnamedescription 和来自 Project 的 tasks 列表
  • @ProjectAnotherDetailedView - 返回的实体将包含 idnamedescription 以及来自 Project 的 users 列表

如果您不注释资源方法,则生成的实体将仅包含:idnamedescription

您可以在User Guide 中找到有关Entity Filtering 的更多信息,也可以直接在我们的示例中尝试:entity-filtering

注意 1: 实体过滤目前仅适用于 JSON 媒体类型(通过 MOXy)。计划在未来添加对其他媒体类型/提供商的支持。

注意 2: Jersey 2.3 未集成到任何(升级的)GF 4.0 版本中。应该成为 GF 4.0 一部分的下一个 Jersey 版本是 2.4。我们计划在接下来的几周内发布 2.4。

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多