java - 为什么 JAXB 不生成完整的类?

标签 java xml jaxb xsd

我有以下 XSD:

<!DOCTYPE xs:schema [
        <!ELEMENT xs:schema (xs:element)*>
        <!ATTLIST xs:schema
                xmlns:xs CDATA #REQUIRED
                attributeFormDefault CDATA #REQUIRED
                elementFormDefault CDATA #REQUIRED>
        <!ELEMENT xs:element (xs:complexType)*>
        <!ATTLIST xs:element
                maxOccurs CDATA #IMPLIED
                minOccurs CDATA #IMPLIED
                name CDATA #REQUIRED
                type CDATA #IMPLIED>
        <!ELEMENT xs:complexType (xs:sequence)*>
        <!ATTLIST xs:complexType
                mixed CDATA #IMPLIED>
        <!ELEMENT xs:sequence (xs:element)*>
        ]>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xs:element name="response">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="status"/>
        <xs:element type="xs:byte" name="items_returned"/>
        <xs:element type="xs:int" name="items_available"/>
        <xs:element type="xs:byte" name="first_item_position"/>
        <xs:element name="result">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="project" maxOccurs="unbounded" minOccurs="0">
                <xs:complexType mixed="true">
                  <xs:sequence>
                    <xs:element type="xs:short" name="id" minOccurs="0"/>
                    <xs:element type="xs:string" name="name" minOccurs="0"/>
                    <xs:element type="xs:string" name="url" minOccurs="0"/>
                    <xs:element type="xs:string" name="html_url" minOccurs="0"/>
                    <xs:element type="xs:dateTime" name="created_at" minOccurs="0"/>
                    <xs:element type="xs:dateTime" name="updated_at" minOccurs="0"/>
                    <xs:element type="xs:string" name="description" minOccurs="0"/>
                    <xs:element type="xs:anyURI" name="homepage_url" minOccurs="0"/>
                    <xs:element type="xs:string" name="download_url" minOccurs="0"/>
                    <xs:element type="xs:string" name="url_name" minOccurs="0"/>
                    <xs:element type="xs:string" name="medium_logo_url" minOccurs="0"/>
                    <xs:element type="xs:string" name="small_logo_url" minOccurs="0"/>
                    <xs:element type="xs:short" name="user_count" minOccurs="0"/>
                    <xs:element type="xs:float" name="average_rating" minOccurs="0"/>
                    <xs:element type="xs:short" name="rating_count" minOccurs="0"/>
                    <xs:element type="xs:byte" name="review_count" minOccurs="0"/>
                    <xs:element type="xs:int" name="analysis_id" minOccurs="0"/>
                    <xs:element name="tags" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element type="xs:string" name="tag" maxOccurs="unbounded" minOccurs="0"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="licenses" minOccurs="0">
                      <xs:complexType mixed="true">
                        <xs:sequence>
                          <xs:element name="license" maxOccurs="unbounded" minOccurs="0">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element type="xs:string" name="name"/>
                                <xs:element type="xs:string" name="nice_name"/>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="links" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="link" maxOccurs="unbounded" minOccurs="0">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element type="xs:string" name="title"/>
                                <xs:element type="xs:string" name="url"/>
                                <xs:element type="xs:string" name="category"/>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

但是当我使用 JAXB 从中生成 Java 类时,它不会生成完整 类,而仅生成某个点之后的内容列表: (ResponseResultProject 已正确生成。但 Project 的成员未生成)

@XmlMixed
protected List<Serializable> content;

以及相应的 setter/getter :

/**
 * Gets the value of the content property.
 * 
 * <p>
 * This accessor method returns a reference to the live list,
 * not a snapshot. Therefore any modification you make to the
 * returned list will be present inside the JAXB object.
 * This is why there is not a <CODE>set</CODE> method for the content property.
 * 
 * <p>
 * For example, to add a new item, do as follows:
 * <pre>
 *    getContent().add(newItem);
 * </pre>
 * 
 * 
 * <p>
 * Objects of the following type(s) are allowed in the list
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link Short }{@code >}
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link XMLGregorianCalendar }{@code >}
 * {@link String }
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * {@link JAXBElement }{@code <}{@link Short }{@code >}
 * {@link JAXBElement }{@code <}{@link Response.Result.Project.Links }{@code >}
 * {@link JAXBElement }{@code <}{@link Short }{@code >}
 * {@link JAXBElement }{@code <}{@link XMLGregorianCalendar }{@code >}
 * {@link JAXBElement }{@code <}{@link Response.Result.Project.Tags }{@code >}
 * {@link JAXBElement }{@code <}{@link Float }{@code >}
 * {@link JAXBElement }{@code <}{@link Response.Result.Project.Licenses }{@code >}
 * {@link JAXBElement }{@code <}{@link Byte }{@code >}
 * {@link JAXBElement }{@code <}{@link Integer }{@code >}
 * {@link JAXBElement }{@code <}{@link String }{@code >}
 * 
 * 
 */
public List<Serializable> getContent() {
    if (content == null) {
        content = new ArrayList<Serializable>();
    }
    return this.content;
}

我想为每个元素都有一个变量,例如就像这个:

<xs:element type="xs:short" name="id" minOccurs="0"/>

或者我的 XSD 有问题吗?

最佳答案

这是因为你的复杂类型有mixed="true"。内容位于 List 中,以便可以在任意两个元素之间添加混合文本内容。

关于java - 为什么 JAXB 不生成完整的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20761434/

相关文章:

java - 使用 JAVA 的安全 Web 服务

c# - 在我的案例中如何向根 XML 添加属性?

java - 为什么单击监听器会使我的 Android 应用程序崩溃?

c# - 如何不使用 XmlSerializer 编写基于值的元素?

java - JaxB2Marshaller 不将 XML 绑定(bind)到 Kotlin 数据类

java - 使用java中的可变对象将XML数据写入OutputStream

java - 使用 GridBagLayout (Java) 构建 GUI

java - 如何在android中动态创建按钮?

java - RestEasy 客户端找不到内容类型应用程序/xml 类型的编写器

java - 如何使用 GSON 库在 Java 对象和 JSON 文件之间映射字段名称