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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

jaxb-xjc.jar_使用xjc在一秒钟内生成您的JAXB类

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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定義要使用的軟件包,當然
  • -幫助,如果您還有其他需要。
Usage: xjc [-options ...] <schema file/URL/dir/jar> ... [-b <bindinfo>] ... If dir is specified, all schema files in it will be compiled. If jar is specified, /META-INF/sun-jaxb.episode binding file will be compiled. Options:-nv : do not perform strict validation of the input schema(s)-extension : allow vendor extensions - do not strictly follow theCompatibility Rules and App E.2 from the JAXB Spec-b <file/dir> : specify external bindings files (each <file> must have its own -b)If a directory is given, **/*.xjb is searched-d <dir> : generated files will go into this directory-p <pkg> : specifies the target package-httpproxy <proxy> : set HTTP/HTTPS proxy. Format is [user[:password]@]proxyHost:proxyPort-httpproxyfile <f> : Works like -httpproxy but takes the argument in a file to protect password-classpath <arg> : specify where to find user class files-catalog <file> : specify catalog files to resolve external entity referencessupport TR9401, XCatalog, and OASIS XML Catalog format.-readOnly : generated files will be in read-only mode-npa : suppress generation of package level annotations (**/package-info.java)-no-header : suppress generation of a file header with timestamp-target (2.0|2.1) : behave like XJC 2.0 or 2.1 and generate code that doesnt use any 2.2 features.-encoding <encoding> : specify character encoding for generated source files-enableIntrospection : enable correct generation of Boolean getters/setters to enable Bean Introspection apis-contentForWildcard : generates content property for types with multiple xs:any derived elements-xmlschema : treat input as W3C XML Schema (default)-relaxng : treat input as RELAX NG (experimental,unsupported)-relaxng-compact : treat input as RELAX NG compact syntax (experimental,unsupported)-dtd : treat input as XML DTD (experimental,unsupported)-wsdl : treat input as WSDL and compile schemas inside it (experimental,unsupported)-verbose : be extra verbose-quiet : suppress compiler output-help : display this help message-version : display version information-fullversion : display full version informationExtensions:-Xinject-code : inject specified Java code fragments into the generated code-Xlocator : enable source location support for generated code-Xsync-methods : generate accessor methods with the 'synchronized' keyword-mark-generated : mark the generated code as @javax.annotation.Generated-episode <FILE> : generate the episode file for separate compilation

好的,讓我們看一個例子。 我們將使用以下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.java

OK,操作成功完成,現在在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类的全部內容,希望文章能夠幫你解決所遇到的問題。

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