日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jaxb报错_JAXB做错了; 尝试Xembly

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。