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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jaxb注解使用_使用JAXB的简介

發(fā)布時(shí)間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jaxb注解使用_使用JAXB的简介 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jaxb注解使用

我正在將一些依賴于Apache XMLBeans的模塊遷移到JAXB。 這是令人興奮和充滿挑戰(zhàn)的幾天。 我想記下我遇到的一些重要事情,以供將來可能會發(fā)現(xiàn)有用的任何人使用。

首先,讓我們來看一下設(shè)置用于JAXB代碼生成的maven插件。 在撰寫本文時(shí),我遇到了兩個(gè)Maven插件。

  • http://www.mojohaus.org/jaxb2-maven-plugin/Documentation/v2.2/index.html
  • https://github.com/highsource/maven-jaxb2-plugin

最后使用第一個(gè),因?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)時(shí)需要進(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不會生成此方法,因此您必須在每個(gè)元素上使用not null條件。 幸運(yùn)的是,綁定配置允許以下操作:
<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:globalBindings generateIsSetMethod="true" </jxb:globalBindings> </jxb:bindings>
  • 默認(rèn)情況下,JAXB不會為XSD文件上定義的枚舉生成Java枚舉。 可悲的是,我找不到在全球范圍內(nèi)應(yīng)用這一代的方法,只能按XSD處理它。 但是對于XMLBeans,這是自動(dòng)完成的。 為了生成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”目錄中,因此我不得不向上移動(dòng)一步,進(jìn)入XSD目錄以獲取所需的XSD文件。

節(jié)點(diǎn) –在這里,您需要提供定義了枚舉的簡單類型的xquery路徑。 如果將其與提供的XSD進(jìn)行交叉檢查,您將了解XQuery路徑如何檢索給定元素。

注意 :無論如何,如果您的xpath返回多個(gè)具有相同名稱的元素,您仍然可以通過在<jxb:bindings>元素上引入元素multiple =” true”來處理此問題。

例如:<jxb:bindings node =” // xs:complexType [@ name ='EndpointType'] / xs:attribute [@ name ='protocol'] / xs:simpleType”
多個(gè)=“ true” >

typesafeEnumClass –在此元素上,您可以提供要生成的Java枚舉名稱。

  • 默認(rèn)情況下,XMLBeans將所有XSD日期和日期時(shí)間元素轉(zhuǎn)換為Java Calendar對象。 但是,對于JAXB,默認(rèn)情況下使用XMLGregorianCalendar 。 全局綁定再次得以解決,并通過以下配置處理了該配置,該配置將所有XSD日期元素轉(zhuǎn)換為Java Calendar對象。
<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:globalBindings><jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/><jxb:javaType name="java.util.Calendar" xmlType="xs:date"parseMethod="javax.xml.bind.DatatypeConverter.parseDate"printMethod="javax.xml.bind.DatatypeConverter.printDate"/><jxb:javaType name="java.util.Calendar" xmlType="xs:time"parseMethod="javax.xml.bind.DatatypeConverter.parseTime"printMethod="javax.xml.bind.DatatypeConverter.printTime"/></jxb:globalBindings></jxb:bindings>
  • 如果需要使您的JAXB對象可序列化,則可以使用以下全局綁定配置來實(shí)現(xiàn);
<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:globalBindings ><xjc:serializable /></jxb:globalBindings></jxb:bindings>

達(dá)到目的的元素是“ <xjc:serializable />”元素。

  • 在JDK 1.8中,我遇到了一個(gè)問題,即如果您的XSD中有一個(gè)導(dǎo)入了另一個(gè)模式以通過HTTP檢索另一個(gè)XSD,則該問題被阻止了。 拋出錯(cuò)誤的摘錄是“因?yàn)橛捎赼ccessExternalDTD屬性設(shè)置的限制而不允許'http'訪問” 。 在這種情況下,解決方法是使用以下maven插件來設(shè)置繞過此限制所需的VM參數(shù)。 有關(guān)此問題的更多信息,請參見此處 。
<plugin><!-- We use this plugin to ensure that our usage of themaven-jaxb2-plugin is JDK 8 compatible in absence of a fixfor https://java.net/jira/browse/MAVEN_JAXB2_PLUGIN-80. --><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0.0</version><executions><execution><id>set-additional-system-properties</id><goals><goal>set-system-properties</goal></goals></execution></executions><configuration><properties><property><name>javax.xml.accessExternalSchema</name><value>file,http</value></property><property><name>javax.xml.accessExternalDTD</name><value>file,http</value></property></properties></configuration> </plugin>

就是這樣。 我會繼續(xù)更新這篇文章。 與往常一樣,您對此的反饋總是非常感激。

謝謝您的閱讀,祝大家有美好的一天。

翻譯自: https://www.javacodegeeks.com/2016/08/introduction-working-jaxb.html

jaxb注解使用

總結(jié)

以上是生活随笔為你收集整理的jaxb注解使用_使用JAXB的简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。