XJC генерирует класс JAXB со слишком большим количеством переменных из XSD - PullRequest
0 голосов
/ 11 января 2019

У меня есть некоторые очень основные данные ниже. Рабочий процесс, который я использую, заключается в экспорте из Google Sheets в xml в виде одного столбца данных.

Как я могу генерировать JAXB классы, которые являются разумными, используя такой инструмент, как trang или xmllint, или, как показано ниже, xjc?

thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ cat dummy.xml 
<data>
  <b />
  <c />
  <d />
  <e />
  <f />
  <f />
  <h />
  <i />
</data>

thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ trang dummy.xml dummy.xsd
thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ cat dummy.xsd 
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="data">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="b"/>
        <xs:element ref="c"/>
        <xs:element ref="d"/>
        <xs:element ref="e"/>
        <xs:element maxOccurs="unbounded" ref="f"/>
        <xs:element ref="h"/>
        <xs:element ref="i"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="b">
    <xs:complexType/>
  </xs:element>
  <xs:element name="c">
    <xs:complexType/>
  </xs:element>
  <xs:element name="d">
    <xs:complexType/>
  </xs:element>
  <xs:element name="e">
    <xs:complexType/>
  </xs:element>
  <xs:element name="f">
    <xs:complexType/>
  </xs:element>
  <xs:element name="h">
    <xs:complexType/>
  </xs:element>
  <xs:element name="i">
    <xs:complexType/>
  </xs:element>
</xs:schema>
thufir@dur:~/jaxb$ 

Я могу создать jaxb файлы как:

<code>thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ xjc dummy.xsd 
parsing a schema...
compiling a schema...
generated/B.java
generated/C.java
generated/D.java
generated/Data.java
generated/E.java
generated/F.java
generated/H.java
generated/I.java
generated/ObjectFactory.java
thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ wc -l generated/Data.java 
246 generated/Data.java
thufir@dur:~/jaxb$ 
thufir@dur:~/jaxb$ head generated/Data.java -n 77
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
// 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: 2019.01.11 at 06:17:29 AM PST 
//


package generated;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element ref="{}b"/>
 *         &lt;element ref="{}c"/>
 *         &lt;element ref="{}d"/>
 *         &lt;element ref="{}e"/>
 *         &lt;element ref="{}f" maxOccurs="unbounded"/>
 *         &lt;element ref="{}h"/>
 *         &lt;element ref="{}i"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * 
* * * / @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "", propOrder = { «Б», «С», «Д», «Е», «Е», "час", "я" }) @XmlRootElement (name = "data") public class Data { @XmlElement (обязательно = true) защищенный B b; @XmlElement (обязательно = true) защищенный C c; @XmlElement (обязательно = true) защищенный D d; @XmlElement (обязательно = true) защищенный E e; @XmlElement (обязательно = true) защищенный список f; @XmlElement (обязательно = true) защищенный H h; @XmlElement (обязательно = true) защищенный я я; / ** * Получает значение свойства b. * * @вернуть * возможный объект Суфир @ дуры: ~ / JAXB $

во-первых, немного спам.

Имеет ли свой метод для каждого элемента? Это такой простой CSV файл, но очень сложный к тому моменту, когда он достигает Java.

Какой может быть более вменяемый подход? Потому что, если исходный файл содержал бы тысячу строк, я не мог бы подумать, как будет выглядеть сгенерированный класс Java.

Итак, как мне исправить файл xsd?

...