moxy json介绍_通过MOXy实现使您的JAXB更清洁
moxy json介绍
现在,XML文件中的数据本质上趋于分层。 例如,考虑以下XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<person><firstname>Barok</firstname><lastname>Obama</lastname><age>52</age><car><model>Green Ford Focus 1.4L</model></car>
</person>
在这种情况下,Barok Obama人拥有的汽车是Green Ford Focus。 在这里,我们看到了XML的层次结构特征。 车在人下。 在一个更复杂的示例中,一个人可以拥有一个汽车,该汽车具有一个汽车收音机,该汽车具有一个放大器,该汽车具有晶体管等。但是,让我们暂时坚持我们的简单情况。 假设我们要使用JAXB解组该XML文件。 我们需要所有人的详细信息(名字,姓氏等)以及属于该人的汽车的型号。 我们创建一个Person POJO和Car POJO并进行适当的注释。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"name", "firstname", "lastname"})
public class Person {private String firstname;private String lastname;private int age;private Car car;public String getLastname() {return lastname;}public void setLastname(String lastname) {this.lastname = lastname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getFirstname() {return firstname;}public void setFirstname(String name) {this.firstname = name;}public Car getCar() {return car;}public void setCar(Car car){this.car= car;}
}
public class Car {private String model;public String getModel() {return model;}public void setModel(String model){this.model = model;}
}
要解组,我们只需做
public static void unmarshall() throws Exception {JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();Person person = (Person)unmarshaller.unmarshal(new File("Person.xml"));System.out.println("Perosn is=" +person.toString());
}
这一切看起来非常简单-特别是当您考虑到Car实体甚至不需要任何注释时! 但是,Car仅具有一个属性,为我们只希望从中获得一个属性的东西而拥有POJO类似乎有点过头了! 记住,这是一个简单的示例,想象一下层次结构是否更深。 类似于包含实体的外部实体,其中包含另一个实体,该实体甚至包含另一个实体,而我们所需的只是外部实体和来自最深层嵌套实体的一个属性。 本质上是相同的问题,但更多的是矫kill过正。 我们必须确保在层次结构中的所有内容上都有POJO类,甚至对于我们不需要的实体也是如此。 没有人喜欢代码膨胀。 所以,我们能做些什么?
好吧,我们要记住的第一件事是,JAXB是一个规范,该规范有许多实现(例如JaxMeAPI,MOXy,Metro)。 如果我们要使用JAXB参考实现(随JDK一起提供,则无能为力)。 我们必须有一个汽车和人POJO。 但是,如果我们使用EclipseLink的MOXy实现,则可以使用其一些扩展来帮助我们。 更具体地说,我们可以使用受XPath启发的MOXy @XmlPath扩展。
让我们来看看它的作用。 这是更新的Person POJO。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"name", "firstname", "lastname"})
public class Person {private String firstname;private String lastname;private int age;public String getLastname() {return lastname;}public void setLastname(String lastname) {this.lastname = lastname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getFirstname() {return firstname;}public void setFirstname(String name) {this.firstname = name;}@XmlPath("car/model/text()")private String model;public String getModel() {return model;}
}
那么,汽车POJO哪里去了? 好吧,它被删除了。 我们不再需要它了。 再见。
使用MOXy @XmlPath批注,我们不需要Car POJO。 该批注驻留在org.eclipse.persistence.oxm.annotations包中,将其放在类路径中确实很简单。 如果您是maven用户,只需添加:
<dependency><groupid>org.eclipse.persistence</groupId><artifactid>eclipselink</artifactId><version>2.3.2</version>
</dependency>
为了告诉您的JDK在运行时将MOXy用于JAXB实现,您放置了一个名为
jaxb.properties与您的JAXB POJO位于同一目录中。 它包含一行:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
为了确保您正在使用MOXy实现,只需检查JAXB上下文:
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
System.out.println("jaxbContext is=" +jaxbContext.toString());
您应该看到类似以下内容:
jaxbContext is=org.eclipse.persistence.jaxb.JAXBContext@5e3974
之后,没有任何变化。 完全相同的数据编码都可以使用。
我之所以喜欢此扩展的原因之一是因为它意味着更少的代码。 这通常意味着更简洁的代码和更多可维护的代码。 这在更复杂的情况下变得更加明显,在这种情况下,实体的层次结构比该简单示例要深得多。 如果使用诸如XJC之类的东西来生成POJO没关系,您仍然会感到代码膨胀。
请记住,JAXB被设置为比JAX替代品(例如SAX和DOM)更简洁的编程模型,但是在具有深层次结构的场景中,使用JAXB对类进行概要分析并不能使它令人信服地更加简洁。 请记住,使用DOM和XPath甚至仅使用SAX来忽略不需要的类将非常容易。
MOXy通过提供对XML文件中的任何内容使用XPath表达式的能力,将清洁的战斗带回到了JAXB。
注意:MOXy刚刚作为WebLogic 12c的JAXB实现包含在内。
参考文献:
- MOXy项目页面
- Blaise Doughan的博客
- 来自都柏林技术博客的 JCG合作伙伴 Alex Staveley 的MOXy实现使您的JAXB清洁器
相关文章 :
- 使用JAXB从XSD生成XML
- 重用生成的JAXB类
- 将对象映射到多个XML模式–天气示例
- JAXB,SAX,DOM性能
- 带有简单框架教程的Android XML绑定
翻译自: https://www.javacodegeeks.com/2012/01/make-your-jaxb-cleaner-with-moxy.html
moxy json介绍
moxy json介绍_通过MOXy实现使您的JAXB更清洁相关推荐
- moxy json介绍_使用MOXy 2.5.1快速且有点脏的JSON模式生成
moxy json介绍 因此,这些天我正在为即将推出的Oracle云服务开发新的REST API,因此我需要做的事情之一就是能够为模型中的bean自动生成JSON模式. 我正在使用MOXy从POJO生 ...
- moxy json介绍_MOXy的@XmlVariableNode – JSON模式示例
moxy json介绍 我们正在向EclipseLink MOXy添加从域模型生成JSON模式的 功能 . 为此,我们创建了一个新的变量节点映射. 在本文中,我将通过将Java模型映射到JSON模式来 ...
- moxy json介绍_MOXy的对象图– XML和JSON的输入/输出局部模型
moxy json介绍 假设您有一个要公开为RESTful服务的域模型. 问题是您只想输入/输出部分数据. 以前,您将创建一个代表子集的单独模型,然后使用代码在模型之间移动数据. 在EclipseLi ...
- moxy json介绍_MOXy的对象图和动态JAXB
moxy json介绍 JAXB(JSR-222)使您可以轻松地将域类的实例转换为XML. EclipseLink MOXy实现提供了一个称为Dynamic JAXB的扩展,在其中,您可以使用诸如Dy ...
- moxy json介绍_MOXy是GlassFish 4中新的默认JSON绑定提供程序
moxy json介绍 GlassFish 4现在可以提供完整的Java EE 7(JSR-342)平台. EclipseLink为该发行版做出了一些重大贡献. 首先是提供JPA 2.1(JSR-33 ...
- moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–客户端
moxy json介绍 最近,我发布了如何利用EclipseLink JAXB(MOXy)的JSON绑定来创建RESTful服务. 在本文中,我将演示在客户端利用MOXy的JSON绑定有多么容易. M ...
- moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–服务器端
moxy json介绍 在之前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对 ...
- 如何让代码更易于维护_如何轻松地使您的网站更易于访问
如何让代码更易于维护 by Jaroslav Vaňkát 通过JaroslavVaňkát 如何轻松地使您的网站更易于访问 (How you can easily make your website ...
- 添加弹窗_阻止电脑广告弹窗窗口让电脑桌面更清洁
在使用计算机上网过程中,经常会弹出一些广告弹窗,这些弹窗或者会干扰到我们的使用计算机的体验,有的则会对桌面内容进行一些遮挡,非常可恶. 那么我们怎么对广告弹窗进行拦截不让它们干扰我们使用计算机呢? 我 ...
最新文章
- 我是这样发现ISP劫持HTTP请求的
- HH SaaS电商系统服务商品在移动端下单结算的交互设计
- 再见收费的Navicat!操作所有数据库靠它就够了!
- Netty 的核心组件
- java filter注入_如何在Java Filter 中注入 Service
- python打印字符串全排列_Python实现全排列的打印
- C++ 你想要的C++面经都在这(附答案 | 持续更新)
- PHP设计模式——抽象工厂
- 浅谈Mysql 表设计规范(转)
- GitLab迁移升级大作战
- Cadence Allegro 中skill应用教程:让代码替我们打工
- 《阴阳师》RPG游戏体验报告
- 2018年看书计划(40本)
- android 评论发表情,安卓手机怎么在微信朋友圈评论发表情包?
- 浅谈 Web 3.0
- 影像组学工作站:医学影像组学中多模态的任务类型
- 抖音复制微信号跳转微信的链接怎么生成的?
- python利用flask_mail、sendgrid发送邮件
- 【西欧经济史第二版】【4】第一章 导言
- python讲义学习 day02
热门文章
- java使用循环案例——CSDN博客
- EasyExcel(笔记)
- 集成SpringSecurity---SpringBoot
- Java中数组的赋值方式
- 方舟非主机服务器无限距离,方舟非专业服务器距离限制怎么解除 | 手游网游页游攻略大全...
- 阳泉2021高考成绩查询时间段,2021年阳泉高考成绩排名及成绩公布时间什么时候出来...
- Java 流式编程stream
- okta使用_使用Okta的单点登录保护您的Vert.x服务器
- java ee7帮助文档_帮助推动Java EE向前发展
- 使用Spring Security进行简单身份验证