moxy json介绍

JAXB(JSR-222)使您可以轻松地将域类的实例转换为XML。 EclipseLink MOXy实现提供了一个称为Dynamic JAXB的扩展,在其中,您可以使用诸如DynamicEntity之类的映射实例代替真实的类​​。 您可以使用采用属性名称的get和set方法(即customer.get(“ address”)customer.set('name“,” Jane Doe“)访问DynamicEntity上的数据。在本文中,我们首先将基于外部映射文件引导动态JAXBContext ,然后将XML文档解组到动态实体,最后将应用对象图来确定结果JSON输出的范围。

您可以从2013年3月24日开始从每晚下载EclipseLink 2.5.0每晚下载,以尝试使用此功能:

  • http://www.eclipse.org/eclipselink/downloads/nightly.php

动态Java模型

对于静态模型,元数据是从Java类派生的,并通过提供的任何元数据进行扩充(请参阅: JAXB –不需要注释 )。 由于在MOXy的动态JAXB中没有域类,因此类型必须完全由元数据定义。 可以从XML模式完成此操作,也可以在本示例中使用MOXy的外部映射文档完成此操作。

oxm.xml

由于没有真正的Java类,因此在外部映射文档中,我们需要指定每个映射,并为每个映射指定Java属性的类型。

<?xml version="1.0"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"package-name="blog.objectgraphs.dynamic"><java-types><java-type name="Customer"><xml-named-object-graphs><xml-named-object-graph name="contact info"><xml-named-attribute-node name="name"/><xml-named-attribute-node name="billingAddress" subgraph="location"/><xml-named-attribute-node name="phoneNumbers" subgraph="simple"/><xml-named-subgraph name="location"><xml-named-attribute-node name="city"/><xml-named-attribute-node name="province"/></xml-named-subgraph></xml-named-object-graph></xml-named-object-graphs><xml-root-element/><java-attributes><xml-attribute java-attribute="id" type="java.lang.Integer"/><xml-element java-attribute="name" type="java.lang.String"/><xml-element java-attribute="billingAddress" type="blog.objectgraphs.dynamic.Address"/><xml-element java-attribute="shippingAddress" type="blog.objectgraphs.dynamic.Address"/><xml-element java-attribute="phoneNumbers" name="phoneNumber" type="blog.objectgraphs.dynamic.PhoneNumber" container-type="java.util.List"><xml-element-wrapper/></xml-element></java-attributes></java-type><java-type name="Address"><java-attributes><xml-element java-attribute="street" type="java.lang.String"/><xml-element java-attribute="city" type="java.lang.String"/><xml-element java-attribute="province" type="java.lang.String"/><xml-element java-attribute="postalCode" type="java.lang.String"/></java-attributes></java-type><java-type name="PhoneNumber"><xml-named-object-graphs><xml-named-object-graph name="simple"><xml-named-attribute-node name="value"/></xml-named-object-graph></xml-named-object-graphs><java-attributes><xml-attribute java-attribute="type" type="java.lang.String"/><xml-value java-attribute="value" type="java.lang.String"/></java-attributes></java-type></java-types>
</xml-bindings>

jaxb.properties

jaxb.properties文件用于指定JAXB提供程序。 对于动态JAXB,此文件的内容与使用MOXy时的通常内容略有不同(与将EclipseLink MOXy指定为JAXB Provider相比 )。 该文件与域模型放在同一包中,因为这里有一个虚拟域模型, jaxb.properties文件将是blog.objectgraphs.dynamic包中唯一的真实项目。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory

示范代码

下面我们将探讨使用对象图的两种不同方法。

演示–通过元数据指定的对象图

在下面的演示代码中,我们将利用外部映射文档中定义的对象图。 对象图是为动态模型定义的,与为相应的静态模型完全一样(请参见: MOXy的对象图– XML和JSON的输入/输出局部模型 )。 唯一不同的是,我们从解组调用中获得的对象是DynamicEntity的实例,而不是Customer的实例。

package blog.objectgraphs.dynamic;import java.io.File;
import java.util.*;
import javax.xml.bind.*;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.jaxb.MarshallerProperties;public class DemoMetadata {public static void main(String[] args) throws Exception {Map<String, Object> properties = new HashMap<String, Object>(1);properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "blog/objectgraphs/dynamic/oxm.xml");JAXBContext jc = JAXBContext.newInstance("blog.objectgraphs.dynamic", DemoMetadata.class.getClassLoader(), properties);Unmarshaller unmarshaller = jc.createUnmarshaller();File xml = new File("src/blog/objectgraphs/dynamic/input.xml");DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xml);// Output XMLMarshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(customer, System.out);// Output XML - Based on Object Graphmarshaller.setProperty(MarshallerProperties.OBJECT_GRAPH, "contact info");marshaller.marshal(customer, System.out);// Output JSON - Based on Object Graphmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);marshaller.marshal(customer, System.out);}}

演示–以编程方式创建的对象图

在下面的演示代码中,我们将以编程方式创建对象图。 对象图是为动态模型创建的,与为相应的静态模型创建的完全一样(请参阅: MOXy的对象图谱-从XML和JSON快速往返于部分模型 )。 不同之处在于,我们使用动态实体的名称而非类来创建对象图,并且从解组调用中获取了DynamicEntity的实例而不是Customer

package blog.objectgraphs.dynamic;import java.io.File;
import java.util.*;
import javax.xml.bind.*;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.jaxb.JAXBHelper;
import org.eclipse.persistence.jaxb.MarshallerProperties;
import org.eclipse.persistence.jaxb.ObjectGraph;
import org.eclipse.persistence.jaxb.Subgraph;public class DemoRuntime {public static void main(String[] args) throws Exception {Map<String, Object> properties = new HashMap<String, Object>(1);properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "blog/objectgraphs/dynamic/oxm.xml");JAXBContext jc = JAXBContext.newInstance("blog.objectgraphs.dynamic", DemoMetadata.class.getClassLoader(), properties);Unmarshaller unmarshaller = jc.createUnmarshaller();File xml = new File("src/blog/objectgraphs/dynamic/input.xml");DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xml);// Output XMLMarshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(customer, System.out);// Create the Object GraphObjectGraph contactInfo = JAXBHelper.getJAXBContext(jc).createObjectGraph("blog.objectgraphs.dynamic.Customer");contactInfo.addAttributeNodes("name");Subgraph location = contactInfo.addSubgraph("billingAddress");location.addAttributeNodes("city", "province");Subgraph simple = contactInfo.addSubgraph("phoneNumbers");simple.addAttributeNodes("value");// Output XML - Based on Object Graphmarshaller.setProperty(MarshallerProperties.OBJECT_GRAPH, contactInfo);marshaller.marshal(customer, System.out);// Output JSON - Based on Object Graphmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);marshaller.marshal(customer, System.out);}}

输入输出

对于元数据驱动的演示和程序化演示,以下输入和输出相同。

input.xml /输出

我们将使用以下文档来填充我们的域模型。 我们还将撤回封送它,以证明所有内容均已实际映射。

<?xml version="1.0" encoding="UTF-8"?>
<customer id="123"><name>Jane Doe</name><billingAddress><street>1 A Street</street><city>Any Town</city><province>Ontario</province><postalCode>A1B 2C3</postalCode></billingAddress><shippingAddress><street>2 B Road</street><city>Another Place</city><province>Quebec</province><postalCode>X7Y 8Z9</postalCode></shippingAddress><phoneNumbers><phoneNumber type="work">555-1111</phoneNumber><phoneNumber type="home">555-2222</phoneNumber></phoneNumbers>
</customer>

基于对象图的XML输出

下面的XML由与上一个XML文档完全相同的模型生成。 区别在于我们利用对象图来选择映射内容的子集。

<?xml version="1.0" encoding="UTF-8"?>
<customer><name>Jane Doe</name><billingAddress><city>Any Town</city><province>Ontario</province></billingAddress><phoneNumbers><phoneNumber>555-1111</phoneNumber><phoneNumber>555-2222</phoneNumber></phoneNumbers>
</customer>

基于对象图的JSON输出

以下是与以JSON表示的先前XML文档相同的子集。 我们使用了新的JSON_WRAPPER_AS_ARRAY_NAME属性(请参阅绑定到JSON和XML –处理集合 )来改善集合值的表示形式。

{"name" : "Jane Doe","billingAddress" : {"city" : "Any Town","province" : "Ontario"},"phoneNumbers" : [ "555-1111", "555-2222" ]
}
参考: Java XML和JSON绑定博客中的JCG合作伙伴 Blaise Doughan的MOXy的对象图和动态JAXB 。

翻译自: https://www.javacodegeeks.com/2013/04/moxys-object-graphs-dynamic-jaxb.html

moxy json介绍

moxy json介绍_MOXy的对象图和动态JAXB相关推荐

  1. moxy json介绍_MOXy的对象图– XML和JSON的输入/输出局部模型

    moxy json介绍 假设您有一个要公开为RESTful服务的域模型. 问题是您只想输入/输出部分数据. 以前,您将创建一个代表子集的单独模型,然后使用代码在模型之间移动数据. 在EclipseLi ...

  2. moxy json介绍_MOXy的@XmlVariableNode – JSON模式示例

    moxy json介绍 我们正在向EclipseLink MOXy添加从域模型生成JSON模式的 功能 . 为此,我们创建了一个新的变量节点映射. 在本文中,我将通过将Java模型映射到JSON模式来 ...

  3. moxy json介绍_MOXy是GlassFish 4中新的默认JSON绑定提供程序

    moxy json介绍 GlassFish 4现在可以提供完整的Java EE 7(JSR-342)平台. EclipseLink为该发行版做出了一些重大贡献. 首先是提供JPA 2.1(JSR-33 ...

  4. moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–客户端

    moxy json介绍 最近,我发布了如何利用EclipseLink JAXB(MOXy)的JSON绑定来创建RESTful服务. 在本文中,我将演示在客户端利用MOXy的JSON绑定有多么容易. M ...

  5. moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–服务器端

    moxy json介绍 在之前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对 ...

  6. MOXy的对象图和动态JAXB

    JAXB(JSR-222)使您可以轻松地将域类的实例转换为XML. EclipseLink MOXy实现提供了一个称为Dynamic JAXB的扩展,在其中,您没有像真实类那样的映射实例,例如名为Dy ...

  7. moxy json介绍_使用MOXy 2.5.1快速且有点脏的JSON模式生成

    moxy json介绍 因此,这些天我正在为即将推出的Oracle云服务开发新的REST API,因此我需要做的事情之一就是能够为模型中的bean自动生成JSON模式. 我正在使用MOXy从POJO生 ...

  8. moxy json介绍_通过MOXy实现使您的JAXB更清洁

    moxy json介绍 编组和解组XML时使用JAXB的主要优点是编程模型. 只需注释几个POJO并使用JAXB API,您就可以很容易地序列化为XML和从XML反序列化. 您无需担心有关XML如何编 ...

  9. 004 json介绍

    json介绍 一种基于文本,独立于语言轻量级数据交换格式 json特点 json 纯文本 json具有自我描述,便于阅读和编写 json 具有清晰的层级结构 有效地提升网络传输速度 标题json语法规 ...

最新文章

  1. CVPR2020 - SLAM workshop 在线盛会预告
  2. myeclipse 8.5 常用快捷键
  3. Spring Boot自定义错误页面
  4. CentOS 7 install Zabbix3.4
  5. 李名洋(1983-),男,中国电信股份有限公司云计算分公司数据分析师。
  6. mysql更新数据库中int 1_Mysql数据库int(1)和tinyint(1)的区别扩展阅读
  7. asp + Access 常见的数据库访问失败问题 Microsoft JET Database Engine 错误 '80004005' 解决办法...
  8. 白板推导系列Pytorch-高斯判别分析(GDA)
  9. 大学生个人网站作业 超简单DIV CSS个人网页成品 简单个人网站作业模板 HTML个人网页设计下载 简约黑白色个人主页
  10. Mujoco编程开发-官方文档
  11. 谷歌浏览器上传下载奔溃问题解决方法
  12. 旧手机改文件储存服务器,旧手机改成云服务器
  13. 计算机安全模式怎么消除计,win10如何解除安全模式,教您如何解除电脑安全模式...
  14. kubernetes pod NodeLost 分析
  15. CodeForces 332B Maximum Absurdity(线段树单点更新)
  16. C# 调用 C++生成的Dll
  17. 取消选中单选框radio的三种方式
  18. 算法专家是否面临失业?一个YMIR搞定所有AI研发环节
  19. 基于51单片机的电子秤proteus仿真设计
  20. 怎样重装系统(win7/)

热门文章

  1. 五分钟轻松了解Hbase面向列的存储
  2. Java中的ThreadPoolExecutor类
  3. 抖音上非常火的旋转图快速部署
  4. 【Css】基础属性(一)
  5. java中判断一个字符在字符串中出现的次数
  6. Token认证微服务
  7. Mybatis实体类属性名与数据库类名不对应的两种解决方法
  8. idea左右切换页面 返回上一次鼠标位置
  9. 2-6 基于SpringBoot的SpringSecurity环境快速搭建与验证
  10. mysql数据横表变成竖表_MySQL中横表和竖表相互转换