jaxb注解使用_使用JAXB的简介
jaxb注解使用
我正在將一些依賴于Apache XMLBeans的模塊遷移到JAXB。 這是令人興奮和充滿挑戰(zhàn)的幾天。 我想記下我遇到的一些重要事情,以供將來可能會發(fā)現(xiàn)有用的任何人使用。
首先,讓我們來看一下設(shè)置用于JAXB代碼生成的maven插件。 在撰寫本文時,我遇到了兩個Maven插件。
- http://www.mojohaus.org/jaxb2-maven-plugin/Documentation/v2.2/index.html
- https://github.com/highsource/maven-jaxb2-plugin
最后使用第一個,因?yàn)槲野l(fā)現(xiàn)配置非常簡單。
您的Maven項(xiàng)目結(jié)構(gòu)如下:
項(xiàng)目文件夾-> src-> main-> xsd
這將保存您要從中生成JAXB對象的所有XSD文件。
項(xiàng)目文件夾-> src-> main-> xjb
這將保存您的“ bindings.xml”文件,該文件是您的數(shù)據(jù)綁定文件,用于運(yùn)行JAX生成任務(wù)(xjc)時需要進(jìn)行的任何自定義。
maven的插件配置如下所示;
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>jaxb2-maven-plugin</artifactId><version>2.2</version><executions><execution><id>xjc</id><goals><goal>xjc</goal></goals></execution></executions><configuration><target>2.1</target><sources><source>src/main/xsd</source></sources></configuration></plugin>- 與XMLBeans一起使用的一件事是所有可選元素的“ isSet”類型的方法,這些方法將檢查是否設(shè)置了該元素。 默認(rèn)情況下,JAXB不會生成此方法,因此您必須在每個元素上使用not null條件。 幸運(yùn)的是,綁定配置允許以下操作:
- 默認(rèn)情況下,JAXB不會為XSD文件上定義的枚舉生成Java枚舉。 可悲的是,我找不到在全球范圍內(nèi)應(yīng)用這一代的方法,只能按XSD處理它。 但是對于XMLBeans,這是自動完成的。 為了生成Java枚舉,應(yīng)執(zhí)行以下操作:
樣本XSD:
<xs:complexType name="EndpointType"><xs:attribute name="protocol"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="HTTP"/><xs:enumeration value="HTTPS"/><xs:enumeration value="PAYLOAD"/></xs:restriction></xs:simpleType></xs:attribute></xs:complexType>JAXB綁定:
<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:jxb="http://java.sun.com/xml/ns/jaxb"xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"jxb:extensionBindingPrefixes="xjc"version="2.1"> <jxb:bindings schemaLocation="../xsd/testconfig.xsd"><jxb:bindings node="//xs:complexType[@name='EndpointType']/xs:attribute[@name='protocol']/xs:simpleType"><jxb:typesafeEnumClass name="Protocol" /></jxb:bindings></jxb:bindings> </jxb:bindings>schemaLocation –這是我要引用的XSD的相對路徑。 由于我的“ bindings.xml”位于“ xjb”目錄中,因此我不得不向上移動一步,進(jìn)入XSD目錄以獲取所需的XSD文件。
節(jié)點(diǎn) –在這里,您需要提供定義了枚舉的簡單類型的xquery路徑。 如果將其與提供的XSD進(jìn)行交叉檢查,您將了解XQuery路徑如何檢索給定元素。
注意 :無論如何,如果您的xpath返回多個具有相同名稱的元素,您仍然可以通過在<jxb:bindings>元素上引入元素multiple =” true”來處理此問題。
例如:<jxb:bindings node =” // xs:complexType [@ name ='EndpointType'] / xs:attribute [@ name ='protocol'] / xs:simpleType”
多個=“ true” >
typesafeEnumClass –在此元素上,您可以提供要生成的Java枚舉名稱。
- 默認(rèn)情況下,XMLBeans將所有XSD日期和日期時間元素轉(zhuǎn)換為Java Calendar對象。 但是,對于JAXB,默認(rèn)情況下使用XMLGregorianCalendar 。 全局綁定再次得以解決,并通過以下配置處理了該配置,該配置將所有XSD日期元素轉(zhuǎn)換為Java Calendar對象。
- 如果需要使您的JAXB對象可序列化,則可以使用以下全局綁定配置來實(shí)現(xiàn);
達(dá)到目的的元素是“ <xjc:serializable />”元素。
- 在JDK 1.8中,我遇到了一個問題,即如果您的XSD中有一個導(dǎo)入了另一個模式以通過HTTP檢索另一個XSD,則該問題被阻止了。 拋出錯誤的摘錄是“因?yàn)橛捎赼ccessExternalDTD屬性設(shè)置的限制而不允許'http'訪問” 。 在這種情況下,解決方法是使用以下maven插件來設(shè)置繞過此限制所需的VM參數(shù)。 有關(guān)此問題的更多信息,請參見此處 。
就是這樣。 我會繼續(xù)更新這篇文章。 與往常一樣,您對此的反饋總是非常感激。
謝謝您的閱讀,祝大家有美好的一天。
翻譯自: https://www.javacodegeeks.com/2016/08/introduction-working-jaxb.html
jaxb注解使用
總結(jié)
以上是生活随笔為你收集整理的jaxb注解使用_使用JAXB的简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 锦鲤需要打氧吗(养锦鲤需要打氧吗,一天打
- 下一篇: 粉尘传感器设置(粉尘传感器说明书)