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

eclipselink

用于JSON处理的Java API(JSR-353)是作为Java EE 7的一部分引入的用于生成和使用JSON的Java标准。JSR-353包括对象(类似于DOM)和流(类似于StAX)API。 在本文中,我将演示我们在EclipseLink 2.6中添加到MOXy的JSON绑定中的最初JSR-353支持。 现在,您可以使用MOXy进行封送:

  • javax.json.JsonArrayBuilder
  • javax.json.JsonObjectBuilder

并从以下方面进行调度:

  • javax.json.JsonStructure
  • javax.json.JsonObject
  • javax.json.JsonArray

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

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

这里提供了JSR-353参考实现:

  • https://java.net/projects/jsonp/downloads/download/ri/javax.json-ri-1.0.zip

Java模型

以下是我们将在本文中使用的简单客户模型。 注意,在此示例中,我们仅使用标准的JAXB(JSR-222)批注。

顾客

package blog.jsonp.moxy;import java.util.*;
import javax.xml.bind.annotation.*;@XmlType(propOrder={"id", "firstName", "lastName", "phoneNumbers"})
public class Customer {private int id;private String firstName;private String lastName;private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}@XmlElement(nillable=true)public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}@XmlElementpublic List<PhoneNumber> getPhoneNumbers() {return phoneNumbers;}}

电话号码

package blog.jsonp.moxy;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)
public class PhoneNumber {private String type;private String number;public String getType() {return type;}public void setType(String type) {this.type = type;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}}

jaxb.properties

要将MOXy指定为JAXB提供程序,您需要在与域模型相同的包中包括一个名为jaxb.properties的文件,并带有以下条目(请参阅:将EclipseLink MOXy指定为JAXB提供程序 )

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

元帅演示

在下面的演示代码中,我们将结合使用JSR-353和MOXy API来生成JSON。 JSR-353的JsonObjectBuilderJsonArrayBuilder用于生成JsonObjectJsonArray的实例。 通过将MOXy包装在MOXy的JsonObjectBuilderResultJsonArrayBuilderResult实例中,我们可以使用MOXy封送这些构建器。

package blog.jsonp.moxy;import java.util.*;
import javax.json.*;
import javax.json.stream.JsonGenerator;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.oxm.json.*;public class MarshalDemo {public static void main(String[] args) throws Exception {// Create the EclipseLink JAXB (MOXy) MarshallerMap<String, Object> jaxbProperties = new HashMap<String, Object>(2);jaxbProperties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");jaxbProperties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);JAXBContext jc = JAXBContext.newInstance(new Class[] {Customer.class}, jaxbProperties);Marshaller marshaller = jc.createMarshaller();// Create the JsonArrayBuilderJsonArrayBuilder customersArrayBuilder = Json.createArrayBuilder();// Build the First CustomerCustomer customer = new Customer();customer.setId(1);customer.setFirstName("Jane");customer.setLastName(null);PhoneNumber phoneNumber = new PhoneNumber();phoneNumber.setType("cell");phoneNumber.setNumber("555-1111");customer.getPhoneNumbers().add(phoneNumber);// Marshal the First Customer Object into the JsonArrayJsonArrayBuilderResult result = new JsonArrayBuilderResult(customersArrayBuilder);marshaller.marshal(customer, result);// Build List of PhoneNumer Objects for Second CustomerList<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>(2);PhoneNumber workPhone = new PhoneNumber();workPhone.setType("work");workPhone.setNumber("555-2222");phoneNumbers.add(workPhone);PhoneNumber homePhone = new PhoneNumber();homePhone.setType("home");homePhone.setNumber("555-3333");phoneNumbers.add(homePhone);// Marshal the List of PhoneNumber ObjectsJsonArrayBuilderResult arrayBuilderResult = new JsonArrayBuilderResult();marshaller.marshal(phoneNumbers, arrayBuilderResult);customersArrayBuilder// Use JSR-353 APIs for Second Customer's Data.add(Json.createObjectBuilder().add("id", 2).add("firstName", "Bob").addNull("lastName")// Included Marshalled PhoneNumber Objects.add("phoneNumbers", arrayBuilderResult.getJsonArrayBuilder())).build();// Write JSON to System.outMap<String, Object> jsonProperties = new HashMap<String, Object>(1);jsonProperties.put(JsonGenerator.PRETTY_PRINTING, true);JsonWriterFactory writerFactory = Json.createWriterFactory(jsonProperties);JsonWriter writer = writerFactory.createWriter(System.out);writer.writeArray(customersArrayBuilder.build());writer.close();}}

输出量

以下是运行Marshal演示( MarshalDemo )的输出。 突出显示的部分(第2-12和18-25行)对应于从我们的Java模型填充的部分。

[{"id":1,"firstName":"Jane","lastName":null,"phoneNumbers":[{"type":"cell","number":"555-1111"}]},{"id":2,"firstName":"Bob","lastName":null,"phoneNumbers":[{"type":"work","number":"555-2222"},{"type":"home","number":"555-3333"}]}
]

解组演示

MOXy使您可以从JSR-353 JsonStructureJsonObjectJsonArray )解组。 要做到这一点只需换歼sonStructure在莫西的JsonStructureSource的实例,并使用需要来源的一个实例解组操作之一。

package blog.jsonp.moxy;import java.io.FileInputStream;
import java.util.*;
import javax.json.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.oxm.json.JsonStructureSource;public class UnmarshalDemo {public static void main(String[] args) throws Exception {try (FileInputStream is = new FileInputStream("src/blog/jsonp/moxy/input.json")) {// Create the EclipseLink JAXB (MOXy) UnmarshallerMap<String, Object> jaxbProperties = new HashMap<String, Object>(2);jaxbProperties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");jaxbProperties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);JAXBContext jc = JAXBContext.newInstance(new Class[] {Customer.class}, jaxbProperties);Unmarshaller unmarshaller = jc.createUnmarshaller();// Parse the JSONJsonReader jsonReader = Json.createReader(is);// Unmarshal Root Level JsonArrayJsonArray customersArray = jsonReader.readArray();JsonStructureSource arraySource = new JsonStructureSource(customersArray);List<Customer> customers = (List<Customer>) unmarshaller.unmarshal(arraySource, Customer.class).getValue();for(Customer customer : customers) {System.out.println(customer.getFirstName());}// Unmarshal Nested JsonObjectJsonObject customerObject = customersArray.getJsonObject(1);JsonStructureSource objectSource = new JsonStructureSource(customerObject);Customer customer = unmarshaller.unmarshal(objectSource, Customer.class).getValue();for(PhoneNumber phoneNumber : customer.getPhoneNumbers()) {System.out.println(phoneNumber.getNumber());}}}}

输入(input.json)

下面JSON输入将使用JsonReader转换为JsonArray。

[{"id":1,"firstName":"Jane","lastName":null,"phoneNumbers":[{"type":"cell","number":"555-1111"}]},{"id":2,"firstName":"Bob","lastName":null,"phoneNumbers":[{"type":"work","number":"555-2222"},{"type":"home","number":"555-3333"}]}
]

输出量

以下是运行解演示程序( UnmarshalDemo )的输出。

Jane
Bob
555-2222
555-3333

参考: EclipseLink MOXy和用于JSON处理的Java API –来自我们的JCG合作伙伴 Blaise Doughan的Java XML和JSON绑定博客中的对象模型API 。

翻译自: https://www.javacodegeeks.com/2013/07/eclipselink-moxy-and-the-java-api-for-json-processing-object-model-apis.html

eclipselink

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传智杯Java志愿者传智专修学院总共召集了n位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花

Java实现思路&#xff1a;创建一个志愿者内部类&#xff0c;包括编号、服务时长、难度、贡献度属性。使用ArrayList将多个志愿者对象联系在一起。使用Collection的sort方法&#xff0c;重写compare方法进行按规则比较。 Java代码&#xff1a; import java.util.ArrayList; im…

将可见的电子签名添加到PDF

我知道这将是一个非常特殊的话题。 电子签名PDF远不是主流用例。 但是&#xff0c;我将其编写的原因有两个&#xff1a;第一&#xff0c;我认为它对真正需要它的人非常有用&#xff1b;第二&#xff0c;我认为随着eIDAS法规的普及&#xff0c;它将变得越来越普遍。电子签名在欧…

高斯白噪声下基于EM的多径时延估计

本文主要来源于复现文献的部分内容&#xff0c;有一定的参考价值&#xff1a; [1] 刘波. 基于EM的突发通信参数估计技术研究[D]. 2009. 文末有代码和参考文献网盘下载地址&#xff0c;有问题欢迎留言交流&#xff01; 1 引言 对于多径传播&#xff0c;接收信号是由源信号与它…

传智杯Java终端有一天您厌烦了电脑上又丑又没用的终端,打算自己实现一个 Terminal

Java思路&#xff1a;使用String的字符串处理以及ArrayList的列表处理。 Java代码&#xff1a; import java.util.ArrayList; import java.util.Scanner; public class Main{public static ArrayList<String> list new ArrayList<>();public static void main(S…

新年迈出Java后台服务器与数据库交互第一步2022最新通用Java8jdbc8连接mysql8数据库进行增删改查等基本操作详解(IDEA),jar包导入,图片等文件流,批量操作

文章目录一、JDBC下载与导入二、获取连接三、PreparedStatement类操作数据库四、操作BLOB类型字段&#xff08;图片视频等&#xff09;五、Batch批量插入&#x1f646;&#x1f3fb;‍♀️&#x1f646;&#x1f3fb;‍♀️文末最新版jdbc jar包下载 &#x1f646;&#x1f3fb…

最优化理论与算法笔记

最优化理论与算法笔记

ejb+jpa_使用Arquillian(包括JPA,EJB,Bean验证和CDI)测试Java EE 6

ejbjpa很长时间以来&#xff0c;我听到很多人对Arquillian说好话 。 尽管我一直在阅读有关其用法的文章&#xff0c;但实际上我无法在一篇文章中找到涵盖我认为重要的某些方面的文章。 当然&#xff0c;我看起来还不够努力。 我要讲的要点是&#xff1a; 使用JPA。 我只是在这…

Win32编程之基于MATLAB与VC交互的多项式回归

运行环境 Matlab R2018b x64 or x32 Visual Studio 2017 企业版 程序预览 文末有完整程序代码下载地址,有任何问题欢迎留言,谢谢点赞哟! 程序功能描述 矩阵运算是大多数科学运算的必要工具。通常情况下,Matlab是实现矩阵运算的最佳工具,但是大多数Matlab运算都是基于d…

隔离区别对待?如何捆绑?Java中的jdbc数据库事务及其隔离级别

文章目录一、数据库事务简介二、JDBC事务处理三、事务的ACID属性四、数据库的隔离级别五、设置隔离级别一、数据库事务简介 事务&#xff1a;一组逻辑操作单元&#xff0c;使数据从一种状态变换到另一种状态。 事务处理&#xff08;事务操作&#xff09;&#xff1a;保证所有…

基于VS的连连看小游戏

运行环境 Matlab R2018b x64 or x32 Visual Studio 2017 企业版 程序预览 目前功能只开发了基本模式,也即是基本的连连看功能和帮助功能,文末有完整程序代码下载地址,有任何问题欢迎留言,谢谢点赞哟! 重要设计步骤和思路以及实现如下所示。 设计思路 类设计

idea使用c3p0数据库连接池无法加载配置文件xml,配置文件放置的位置

注意&#xff1a;要把c3p0-config.xml文件放在输出的文件夹里面&#xff0c;即放在out里面&#xff0c;而不是放在src里面。&#xff08;如下图&#xff09; 至于配置文件怎么写&#xff0c;可以参考其他经验教程&#xff0c;这里不再赘述。

spring boo_为您的下一个基于Spring的应用程序考虑使用spring-boot的原因!

spring booSpring-boot提供了一种创建基于Spring的应用程序的快速方法。 对于下一个项目&#xff0c;有一些非常令人信服的理由考虑使用Spring-boot&#xff1a; 原因1&#xff1a;使用spring-boot启动程序项目进行更简单的依赖性管理。 考虑使用CR2是使用h2数据库来实现的&am…

自适应滤波实例之系统辨识

实验模型 x(n):随机信号,服从N(0,1)分布 h(n):未知的系统响应(由5阶FIR低通滤波器模拟) h=[0.2,0.5,0.7,-0.5,0.2]; d(n):期望信号,d(n)=x(n)*h(n) 目标:根据接收端接收信号r(n)(此时即为期望信号d(n))和训练序列x’(n)求未知的h(n) LMS实验结果 设自适应滤波器…

jdbc数据库连接池C3P0和Druid德鲁伊,Java与MySQL数据库交互

文章目录一、 连接池的必要性二、数据库连接池技术三、多种开源的数据库连接池四、C3P0数据库连接池五、Druid&#xff08;德鲁伊&#xff09;数据库连接池六、C3P0和Druid驱动jar包一、 连接池的必要性 在使用开发基于数据库的web程序时&#xff0c;传统的模式基本是按以下步…

使用Spring Boot构建REST Web服务

本教程提供了有关如何使用Spring Boot构建Restfull Web服务的分步指南。 先决条件&#xff1a; Eclipse IDE&#xff08;最新版本&#xff09; Maven的4 Java 1.8 1.创建Maven Web项目 打开eclipse&#xff0c;然后创建一个新的Maven Web项目&#xff0c;并将其命名为Spri…

Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作

文章目录一、Apache-DBUtils简介二、主要API的使用1、DbUtils类2、QueryRunner类3、ResultSetHandler接口及实现类三、Apache-DBUtils驱动下载一、Apache-DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库&#xff0c;它是对JDBC的简单封装&#xff0c…

自适应滤波实例之系统逆辨识(以及系统零极点对逆辨识效果的影响分析)

实验模型 x(n):随机信号,服从N(0,1)分布 h(n):未知的系统响应(由10阶FIR低通滤波器模拟) h=[0.03,-0.04,0.06,-0.2,-0.5,0.75,0.37,0.24,0.01,0.06]; d(n):期望信号,d(n)=x(n)*h(n) 目标:根据接收端接收信号r(n)和训练序列x’(n) (此时即为期望信号d(n)),求未知…

卡尔曼滤波实例之系统逆辨识

实验模型 x(n):随机信号,服从N(0,1)分布 h(n):未知的系统响应(由10阶FIR低通滤波器模拟) h=[0.03,-0.04,0.06,-0.2,-0.5,0.75,0.37,0.24,0.01,0.06]; d(n):期望信号,d(n)=x(n)*h(n) 目标:根据接收端接收信号r(n)和训练序列x’(n) (此时即为期望信号d(n)),求未知…

static和瞬态_具有瞬态属性的视图对象的钝化和激活

static和瞬态在应用程序模块的钝化/激活周期内&#xff0c;框架也将钝化并激活视图对象。 通常&#xff0c;框架保存有关VO状态&#xff0c;当前行&#xff0c;绑定变量值等的信息。 但是没有数据。 激活视图对象后&#xff0c;将重新执行VO的查询&#xff0c;并重新获取数据。…