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

您可以使用每晚构建的EclipseLink 2.6.0进行尝试:

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

JSON模式(input.json / Output)

以下是摘自http://json-schema.org/examples.html的“基本示例”。 请注意,该类型具有许多属性,但它们不会显示为JSON数组。 相反,它们显示为键入在属性名称上的单独的JSON对象。

{"title": "Example Schema","type": "object","properties": {"firstName": {"type": "string"},"lastName": {"type": "string"},"age": {"description": "Age in years","type": "integer","minimum": 0}},"required": ["firstName", "lastName"]
}

Java模型

以下是我们将用于此示例的Java模型。

JsonSchema(存储在列表中的属性)

在这种JSON模式的Java表示中,我们有一个包含Property对象集合的类。 而不是集合的默认表示形式(请参阅: 绑定到JSON&XML –处理集合 ),我们希望每个Property以其名称为键。 我们可以使用@XmlVariableNode批注进行此操作。 通过它,我们可以指定目标对象的字段/属性,该字段/属性应用作键。

package blog.variablenode.jsonschema;import java.util.*;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlVariableNode;@XmlAccessorType(XmlAccessType.FIELD)
public class JsonSchema {private String title;private String type;@XmlElementWrapper@XmlVariableNode("name")public List<Property> properties;private List<String> required;}

JsonSchema(存储在地图中的属性)

在此版本的JsonSchema类中,我们将属性的类型从List <Property>属性更改为Map <String,Property> 。 注释保持不变,所不同的是,当@XmlVariableNode是在地图中使用的变量节点名称作为地图的关键。

package blog.variablenode.jsonschema;import java.util.*;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlVariableNode;@XmlAccessorType(XmlAccessType.FIELD)
public class JsonSchema {private String title;private String type;@XmlElementWrapper@XmlVariableNode("name")public Map<String, Property> properties;private List<String> required;}

属性

为了防止将名称字段编组,我们需要使用@XmlTransient对其进行注释(请参见JAXB和Unmapped属性 )。

package blog.variablenode.jsonschema;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class Property {@XmlTransientprivate String name;private String description;private String type;private Integer minimum;}

示范代码

下面是一些示例代码,您可以用来证明一切正常。

package blog.variablenode.jsonschema;import java.util.*;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.JAXBContextProperties;public class Demo {public static void main(String[] args) throws Exception {Map<String, Object> properties = new HashMap<String, Object>();properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);JAXBContext jc = JAXBContext.newInstance(new Class[] {JsonSchema.class}, properties);Unmarshaller unmarshaller = jc.createUnmarshaller();StreamSource json = new StreamSource("src/blog/variablenode/jsonschema/input.json");JsonSchema jsonSchema = unmarshaller.unmarshal(json, JsonSchema.class).getValue();Marshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(jsonSchema, System.out);}}

外部元数据

MOXy还提供了一个外部映射文档,该文档使您可以为第三方对象提供元数据或为模型应用备用映射(请参阅:将对象映射到多个XML模式–天气示例 )。 以下是此示例的映射文档。

<?xml version="1.0"?>
<xml-bindingsxmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"package-name="blog.variablenode.jsonschema"xml-accessor-type="FIELD"><java-types><java-type name="JsonSchema"><java-attributes><xml-variable-node java-attribute="properties" java-variable-attribute="name"><xml-element-wrapper/></xml-variable-node></java-attributes></java-type><java-type name="Property"><java-attributes><xml-transient java-attribute="name"/></java-attributes></java-type></java-types>
</xml-bindings>
参考: 来自MOXy的@XmlVariableNode –来自我们的JCG合作伙伴 Blaise Doughan的JSON模式示例 ,位于Java XML&JSON Binding博客上。

翻译自: https://www.javacodegeeks.com/2013/06/moxys-xmlvariablenode-json-schema-example.html

MOXy的@XmlVariableNode – JSON模式示例相关推荐

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

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

  2. 使用MOXy 2.5.1快速且有点脏的JSON模式生成

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

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

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

  4. json文件示例_Spark SQL - JSON数据集

    Spark SQL可以自动捕获JSON数据集的模式,并将其作为DataFrame加载. 可以使用SQLContext.read.json()对String或JSON文件的RDD进行此转换.Spark ...

  5. jaxb xsd生成xml_使用JAXB和Jackson从XSD生成JSON模式

    jaxb xsd生成xml 在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演 ...

  6. eclipselink_EclipseLink MOXy和用于JSON处理的Java API –对象模型API

    eclipselink 用于JSON处理的Java API(JSR-353)是作为Java EE 7的一部分引入的用于生成和使用JSON的Java标准.JSR-353包括对象(类似于DOM)和流(类似 ...

  7. JSON模式在构建和部署API中的作用

    什么是JSON模式 ? 它提供了描述任何JSON值的结构和属性的详尽方法. 在记录对任何JSON API的请求和响应时,它非常有用. 本文将探讨其在API的软件开发周期中的作用. 记录JSON响应格式 ...

  8. 使用JAXB和Jackson从XSD生成JSON模式

    在本文中,我演示了一种从XML Schema (XSD)生成JSON Schema的 方法 . 在概述从XML Schema创建JSON Schema的方法的同时,本文还演示了JAXB实现的用法(与J ...

  9. EclipseLink MOXy和用于JSON处理的Java API –对象模型API

    用于JSON处理的Java API(JSR-353)是用于生成和使用JSON的Java标准,它是Java EE 7的一部分引入.JSR-353包括对象(类似于DOM)和流(类似于StAX)API. 在 ...

最新文章

  1. 邻接表存储(链式前向星)
  2. NOIP2007 树网的核 [BZOJ2282][Sdoi2011]消防
  3. C语言输出长方柱的体积,需要求3个长方柱的体积,请编写一个基于对象的程序。数据成员包括length(长)、width(宽)、 height(高)。要求用成员函数实现以下功能...
  4. get_metrology_object_result_contour查询计量对象的结果轮廓
  5. java color类 蓝色_java中Color类的简单总结
  6. [蓝桥杯2019初赛]等差数列-数列
  7. java 匹配最后一次出现的字符_在Java中查找字符串中字符的最后一次出现
  8. 代理服务器列表(20100116)
  9. Jmeter函数助手
  10. [转]ASP.net(c#)生成条形码
  11. 群论在计算机应用技术,群论在计算机全领域中应用.ppt
  12. STM32开发工具-keil5安装
  13. 月薪11970元的网络运维工程师需要掌握哪些必备技能?
  14. 射频识别技术在手机支付技术中的应用
  15. 计算机运行快是取决什么,电脑速度快慢取决哪个硬件
  16. 基于PythonGUI的原神圣遗物游戏装备管理与角色数值模拟系统
  17. 浅谈MES系统追溯功能五大关键作用
  18. 渗透测试员完整职业指南
  19. 视频教程-必会神器之MySQL数据库-MySQL
  20. 一文带你了解移动入库指南(详细版)

热门文章

  1. 通过网页查看服务器算法,java分析html算法(java网页蜘蛛算法示例)
  2. python参数_python参数的介绍
  3. java序列化与深度拷贝
  4. mysql duplicate key与replace into对比
  5. jdk12 switch_玩JDK 12的Switch表达式
  6. 机器学习java_如何开始使用Java机器学习
  7. java编写应用程序_为您的Java应用程序编写数据驱动的测试
  8. javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局
  9. viewpager默认界面_使用默认方法的界面演变–第一部分:方法
  10. JAX-RS和OpenAPI对Hypermedia API的支持:任重而道远