jaxb-xjc.jar_使用xjc在一秒钟内生成您的JAXB类
jaxb-xjc.jar
由于JAXB是JDK的一部分,因此它是處理XML文檔最常用的框架之一。 它提供了一種從XML文檔檢索數據并將其存儲到Java類的簡便方法。 因為幾乎每個Java開發人員都已經使用過JAXB,所以我不會解釋不同的JAXB批注。 相反,我將重點介紹一個名為xjc的命令行工具,并向您展示如何基于現有XSD架構描述生成綁定類。
為現有XML接口實現所有綁定類可能是一項耗時且繁瑣的任務。 但好消息是,您不需要這樣做。 如果您具有XSD架構描述,則可以使用xjc綁定編譯器創建所需的類。 甚至更好的是,xjc是JDK的一部分。 因此,不需要外部工具,如果需要,您應該始終使用它。
使用xjc
如下面的代碼片段所示,xjc支持許多選項。 最重要的是:
- -d定義生成的類應在文件系統中存儲的位置,
- -p定義要使用的軟件包,當然
- -幫助,如果您還有其他需要。
例
好的,讓我們看一個例子。 我們將使用以下XSD模式定義和xjc來生成具有描述的屬性和必需的JAXB批注的Author和Book類。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="author" type="author"/><xs:element name="book" type="book"/><xs:complexType name="author"><xs:sequence><xs:element name="firstName" type="xs:string" minOccurs="0"/><xs:element name="lastName" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType><xs:complexType name="book"><xs:sequence><xs:element ref="author" minOccurs="0"/><xs:element name="pages" type="xs:int"/><xs:element name="publicationDate" type="xs:dateTime" minOccurs="0"/><xs:element name="title" type="xs:string" minOccurs="0"/></xs:sequence></xs:complexType> </xs:schema>以下命令調用xjc,并為生成的類,包和XSD模式文件提供目標目錄。
xjc -d src -p blog.thoughts.on.java schema.xsdparsing a schema... compiling a schema... blog\thoughts\on\java\Author.java blog\thoughts\on\java\Book.java blog\thoughts\on\java\ObjectFactory.javaOK,操作成功完成,現在在src目錄中有3個生成的類。 這可能比某些人預期的要多。 因此,讓我們看看它們中的每一個。
類Author和Book看起來像預期的那樣。 它們包含XSD架構中描述的屬性和必需的JAXB批注。
// // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. // Generated on: 2014.01.13 at 07:38:24 PM CET //package blog.thoughts.on.java;import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlType;/*** <p>Java class for author complex type.* * <p>The following schema fragment specifies the expected content contained within this class.* * <pre>* <complexType name="author">* <complexContent>* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">* <sequence>* <element name="firstName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>* <element name="lastName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>* </sequence>* </restriction>* </complexContent>* </complexType>* </pre>* * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "author", propOrder = {"firstName","lastName" }) public class Author {protected String firstName;protected String lastName;/*** Gets the value of the firstName property.* * @return* possible object is* {@link String }* */public String getFirstName() {return firstName;}/*** Sets the value of the firstName property.* * @param value* allowed object is* {@link String }* */public void setFirstName(String value) {this.firstName = value;}/*** Gets the value of the lastName property.* * @return* possible object is* {@link String }* */public String getLastName() {return lastName;}/*** Sets the value of the lastName property.* * @param value* allowed object is* {@link String }* */public void setLastName(String value) {this.lastName = value;}}// // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. // Generated on: 2014.01.13 at 07:38:24 PM CET //package blog.thoughts.on.java;import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar;/*** <p>Java class for book complex type.* * <p>The following schema fragment specifies the expected content contained within this class.* * <pre>* <complexType name="book">* <complexContent>* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">* <sequence>* <element ref="{}author" minOccurs="0"/>* <element name="pages" type="{http://www.w3.org/2001/XMLSchema}int"/>* <element name="publicationDate" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>* <element name="title" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>* </sequence>* </restriction>* </complexContent>* </complexType>* </pre>* * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "book", propOrder = {"author","pages","publicationDate","title" }) public class Book {protected Author author;protected int pages;@XmlSchemaType(name = "dateTime")protected XMLGregorianCalendar publicationDate;protected String title;/*** Gets the value of the author property.* * @return* possible object is* {@link Author }* */public Author getAuthor() {return author;}/*** Sets the value of the author property.* * @param value* allowed object is* {@link Author }* */public void setAuthor(Author value) {this.author = value;}/*** Gets the value of the pages property.* */public int getPages() {return pages;}/*** Sets the value of the pages property.* */public void setPages(int value) {this.pages = value;}/*** Gets the value of the publicationDate property.* * @return* possible object is* {@link XMLGregorianCalendar }* */public XMLGregorianCalendar getPublicationDate() {return publicationDate;}/*** Sets the value of the publicationDate property.* * @param value* allowed object is* {@link XMLGregorianCalendar }* */public void setPublicationDate(XMLGregorianCalendar value) {this.publicationDate = value;}/*** Gets the value of the title property.* * @return* possible object is* {@link String }* */public String getTitle() {return title;}/*** Sets the value of the title property.* * @param value* allowed object is* {@link String }* */public void setTitle(String value) {this.title = value;}}第三類,也許是意外類,是ObjectFactory類。 它包含每個生成的類或接口的工廠方法。 如果您需要創建對象的JAXBElement表示形式,這將非常有用。
// // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. // Generated on: 2014.01.13 at 07:38:24 PM CET //package blog.thoughts.on.java;import javax.xml.bind.JAXBElement; import javax.xml.bind.annotation.XmlElementDecl; import javax.xml.bind.annotation.XmlRegistry; import javax.xml.namespace.QName;/*** This object contains factory methods for each * Java content interface and Java element interface * generated in the blog.thoughts.on.java package. * <p>An ObjectFactory allows you to programatically * construct new instances of the Java representation * for XML content. The Java representation of XML * content can consist of schema derived interfaces * and classes representing the binding of schema * type definitions, element declarations and model * groups. Factory methods for each of these are * provided in this class.* */ @XmlRegistry public class ObjectFactory {private final static QName _Author_QNAME = new QName("", "author");private final static QName _Book_QNAME = new QName("", "book");/*** Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: blog.thoughts.on.java* */public ObjectFactory() {}/*** Create an instance of {@link Author }* */public Author createAuthor() {return new Author();}/*** Create an instance of {@link Book }* */public Book createBook() {return new Book();}/*** Create an instance of {@link JAXBElement }{@code <}{@link Author }{@code >}}* */@XmlElementDecl(namespace = "", name = "author")public JAXBElement<Author> createAuthor(Author value) {return new JAXBElement<Author>(_Author_QNAME, Author.class, null, value);}/*** Create an instance of {@link JAXBElement }{@code <}{@link Book }{@code >}}* */@XmlElementDecl(namespace = "", name = "book")public JAXBElement<Book> createBook(Book value) {return new JAXBElement<Book>(_Book_QNAME, Book.class, null, value);}}結論
我們研究了xjc并將其用于為現有XSD模式定義生成所需的綁定類。 xjc為每種復雜類型生成了一個類,并為簡化JAXBElement表示形式的創建提供了附加的工廠類。
您如何看待xjc和生成的代碼? 請給我留言并告訴我。
我認為該工具可生成非常干凈的代碼并節省大量時間。 在大多數情況下,可以將生成的代碼直接添加到項目中。 但是,即使不是這種情況,基于生成的代碼進行一些重構比自己做所有事情要快得多。
翻譯自: https://www.javacodegeeks.com/2014/05/generate-your-jaxb-classes-in-a-second-with-xjc.html
jaxb-xjc.jar
總結
以上是生活随笔為你收集整理的jaxb-xjc.jar_使用xjc在一秒钟内生成您的JAXB类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓千牛和苹果千牛界面不一样(安卓千牛)
- 下一篇: 英雄联盟赏金猎人最新符文天赋加点图(赏金