Java 元素未使用JAXB显示

Java 元素未使用JAXB显示,java,jaxb,Java,Jaxb,我试图将一个带有表名、行数和列列表的表bean输出到XML。如果我像属性一样注释它们,它们会显示: 因此,这个定义: @XmlRootElement(name = "table") public class Table { private String tableName; private int rowCount; private List<Column> columnList; @XmlAttribute(name = "name")

我试图将一个带有表名、行数和列列表的表bean输出到XML。如果我像属性一样注释它们,它们会显示: 因此,这个定义:

@XmlRootElement(name = "table")
public class Table {

    private String tableName;
    private int rowCount;
    private List<Column> columnList;

    @XmlAttribute(name = "name")
    public String getTableName() {
        return tableName;
    }

    @XmlAttribute(name = "rowCount")
    public int getRowCount() {
        return rowCount;
    }

    @XmlElement(name = "column")
    public List<Column> getColumnList() {
        return columnList;
    }

}
输出如下:

    <tables>
     <table name="GGS_MARKER" rowCount="19190">
     <column>
      <columnName>MARKER_TEXT</columnName>
      <datatype>VARCHAR2</datatype>
      <length>4000.0</length>
     </column>
...
但如果我用@XmlElement更改@XmlAttribute,它只会显示:

    <tables>
     <table>
     <column>
      <columnName>MARKER_TEXT</columnName>
      <datatype>VARCHAR2</datatype>
      <length>4000.0</length>
     </column>
...

要将name和rowcount作为元素获取,我应该在类中放置什么?

在示例中,您需要做的就是将@xmldattribute更改为@xmlement。如果在您的帖子中只有get方法而没有set方法,那么您需要显式地添加@xmlement注释,因为默认注释不会应用于此用例中。默认情况下,所有未映射的属性都假定有@xmlement注释

桌子

输出


在您的示例中,您需要做的就是将@XmlAttribute更改为@XmlElement。如果在您的帖子中只有get方法而没有set方法,那么您需要显式地添加@xmlement注释,因为默认注释不会应用于此用例中。默认情况下,所有未映射的属性都假定有@xmlement注释

桌子

输出


他们以后肯定不会出现吗?不,我查过了。我还进行了调试,以确保它们在运行时有一个值。它们肯定不会在之后出现?不,我检查了它。我还进行了调试,以确保它们在运行时具有值。
package forum10794522;

import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement(name = "table")
public class Table {

    static Table EXAMPLE_TABLE;
    static {
        EXAMPLE_TABLE = new Table();
        EXAMPLE_TABLE.tableName = "GGS_MARKER";
        EXAMPLE_TABLE.rowCount = 19190;
        List<Column> columns = new ArrayList<Column>(2);
        columns.add(new Column());
        columns.add(new Column());
        EXAMPLE_TABLE.columnList = columns;
    }

    private String tableName;
    private int rowCount;
    private List<Column> columnList;

    @XmlElement(name = "name")
    public String getTableName() {
        return tableName;
    }

    @XmlElement(name = "rowCount")
    public int getRowCount() {
        return rowCount;
    }

    @XmlElement(name = "column")
    public List<Column> getColumnList() {
        return columnList;
    }

}
package forum10794522;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Table.class);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(Table.EXAMPLE_TABLE, System.out);
    }

}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<table>
    <column/>
    <column/>
    <rowCount>19190</rowCount>
    <name>GGS_MARKER</name>
</table>