jaxb报错_JAXB做错了; 尝试Xembly
jaxb报错
JAXB是一项具有10年历史的Java技术,它使我们能够将Java对象转换为XML文档(编组)和返回(取消编组)。 我认为这项技术基于setter和getter,并且通过将对象转换为被动数据结构而违反了面向对象编程的关键原理。 我建议您改用Xembly将Java对象编组为XML文档。
这就是JAXB编组的工作方式。 假设您有一个Book
类,需要将其编组为XML文档。 您必须创建吸气剂并对其进行注释:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Book {private final String isbn;private final String title;public Book(final String isbn, final String title) {this.isbn = isbn;this.title = title;}@XmlElementpublic String getIsbn() {return this.isbn;}@XmlElementpublic String getTitle() {return this.title;}
}
然后创建一个编组器,并要求它将Book
类的实例转换为XML:
final Book book = new Book("0132350882", "Clean Code");
final JAXBContext context = JAXBContext.newInstance(Book.class);
final Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(book, System.out);
您应该在输出中期望这样的事情:
<?xml version="1.0"?>
<book><isbn>0132350882</isbn><title>Clean Code</title>
</book>
那怎么了? 对象关系映射的错误几乎相同,这在ORM中解释为“进攻性反模式” 。 JAXB将对象视为数据包,然后按照JAXB的要求提取数据并将其转换为XML。 对象无法控制此过程。 因此,对象不再是对象 ,而是被动的数据包。
理想的方法是重新设计我们的班级Book
this:
public class Book {private final String isbn;private final String title;public Book(final String isbn, final String title) {this.isbn = isbn;this.title = title;}public String toXML() {// create XML document and return}
}
但是,这种方法存在一些问题。 首先,存在大量的代码重复。 在Java中,构建XML文档是一个相当冗长的过程。 如果每个类都必须在其toXML()
方法中重新实现它,那么重复代码将是一个大问题。
第二个问题是我们不确切知道应该以哪种类型包装XML文档。它可能是String
或InputStream
或org.w3c.dom.Document
的实例。 在每个对象中创建许多toXML()
方法肯定是一场灾难。
Xembly提供了解决方案。 正如我前面提到的 ,它是XML结构和操作命令式语言。 这是我们如何在Xembly的帮助下实现Book
对象的方法:
import org.xembly.Directive;
public class Book {private final String isbn;private final String title;public Book(final String isbn, final String title) {this.isbn = isbn;this.title = title;}public Iterable<Directive> toXembly() {return new Directives().add("book").add("isbn").set(this.isbn).up().add("title").set(this.title).up().up();}
}
现在,为了构建XML文档,我们应该在对象外部使用以下代码:
final Book book = new Book("0132350882", "Clean Code");
final String xml = new Xembler(book.toXembly()).xml();
Xembler
类将把Xembly指令转换为XML文档。
该解决方案的优点在于,不通过getter公开对象的内部,并且该对象完全负责XML编组过程。 另外,这些指令的兼容性可能很高-远远高于JAXB的繁琐注释。
- Xembly是一个开源项目,请随时向Github提交您的问题或更正。
翻译自: https://www.javacodegeeks.com/2015/04/jaxb-is-doing-it-wrong-try-xembly.html
jaxb报错
jaxb报错_JAXB做错了; 尝试Xembly相关推荐
- shell 获取ora报错信息_ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析...
概述 前段时间使用的oracle 11g数据库,在用一段时间后(开始要较长时间才出现,后来较短时间就出现),频繁报ORA-04030错误,具体错误信息是 ORA-04030: 在尝试分配...字节(. ...
- 禁止php 报错怎么做,php – 禁用Laravel错误处理程序
不是没有严重违反框架的原则(我会告诉你如何做下面的,如果你仍然有兴趣). 有一些事情使得难以完成.很容易解决默认错误和异常处理程序 set_error_handler(null); set_excep ...
- 报错 : CRTC 63 尝试模式 CRTC 63:尝试 800x600@60Hz 模式输出在 1366x768@60Hz (通过 0)
打开Ubuntu之后的开启页面出现: 所选模式均不匹配可能的模式: 为 CRTC 63 尝试模式 CRTC 63:尝试 800x600@60Hz 模式输出在 1366x768@60Hz (通过 0) ...
- 明明一样的程序为啥有的系统就报错有的就正常运行呢_SurfaceGo Android系统折腾笔记...
Surface Go平板在Win10系统下的表现我认为还是比较出色的,x86架构CPU意味着不考虑性能的情况下,台式机上能跑的程序,这台平板也能跑,新Galgame一出就能直接安装上躺床上玩,妙哉. ...
- mysql把data移走后报错_【mysql案例】Failedtoopenlog--datadir物理迁移报错
1.1.1.mysql5.6.14的datadir迁移时遇到报错 [环境描述] 在机器A上安装了perconamysql 5.6.14,数据库停启正常,datadir路径为pathA,并且已经做了应用 ...
- mysql pxc 报错_登录mysqlpxc报错找不到库文件libreadline.so.7
1.1简述: 基于上篇博文,为了部署mysqlpxc集群环境,需要开启3个vmware虚拟机实例来部署3个mysqlpxc实例. 第一篇博文中在初始化mysqlpxc实例后,登录实例时,报错提示: [ ...
- 【webpack】输入npm run dev报错: This is probably not a problem with npm. There is likely additional loggin
今天做项目的过程中,发现输入了npm run dev,报错提示.然后尝试去修改这个bug. 1.删除node_modules rm -rf node_modules 2.删除package-lock. ...
- 基带qcn的备份与写入相关 格机 nv报错
今天码一个基带qcn相关的教程贴.首先关于基带qcn类的基础这边不在细作阐述.有兴趣的可以查看另外我发的教程贴查询.想到哪里写到那里.任何的教程不一定适用与你的机型.只能给你引导和转换思维的一个方式. ...
- 前端报错如何在服务器中显示,详解Vue项目中出现Loading chunk {n} failed问题的解决方法...
最近有个Vue项目中会偶尔出现Loading chunk {n} failed的报错,报错来自于webpack进行code spilt之后某些bundle文件lazy loading失败.但是这个问题 ...
最新文章
- js异步提交form表单的解决方案
- c语言括号匹配的检验,检验括号匹配的算法
- html 图片剪裁控件,h5图像裁剪(基于canvas)插件Image-Clip
- CVPR 2022 | 阿里达摩院新技术,美体塑形一键就成
- 微软程序在Android上跑,想在Win 10上运行Android应用?这类手机用户已经可以尝鲜...
- VTK:AnimateActors用法实战
- python123第一周测试作业指导书_2017年我的第一周总结
- 后端:Java 8 中的 Map 实用操作,学习下!
- 企业员工工资管理系统
- 运营、AI、Python数据分析,这3场直播你别错过
- 双系统重装win7/Xp后如何恢复ubuntu引导--转载
- 矩阵分析 (七) 矩阵特征值的估计
- 运放专题:电压比较器
- 风寒感冒和风热感冒的药膳方
- C# 用户自定义控件添加到工具箱
- 拾贰SparkSQL:数据关联优化
- 确定sw1开关信号输入端口_机械光开关 MEMS光开关
- 《码出高效》学习:TreeMap与红黑树
- scrapy爬虫实战教程
- 【python】绘制箱体图/蜡烛图/K线图
热门文章
- CF570D-Tree Requests【长链剖分】
- YbtOJ#20237-[冲刺NOIP2020模拟赛Day10]区间均值【树状数组】
- P3327-[SDOI2015]约数个数和【莫比乌斯反演】
- jzoj1158-荒岛野人【扩欧,gcd,同余方程】
- E - Escape from the Island(最短路+dp)
- codeforces1440 D. Graph Subset Problem
- 【动态规划】 摆花 【NOIp普及组 2012 第三题】 (ssl 2360/luogu 1077)
- Java 证书pem转KeyStore、jks文件
- JDK9新特性实战:简化流关闭新姿势
- 【最全最详细】使用publiccms实现动态可维护的导航菜单栏