如何在glassfish v4 MOXy Provider中指定和组织OXM_METADATA_SOURCE?

时间:2013-10-05 06:58:28

标签: jaxb jax-rs moxy glassfish-4

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

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

所以这就是问题所在:

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

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

1 个答案:

答案 0 :(得分:1)

您可以尝试在Jersey 2.3中引入的名为实体过滤的新功能。即使实体过滤不是基于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

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

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

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