Java 元素未使用JAXB显示
我试图将一个带有表名、行数和列列表的表bean输出到XML。如果我像属性一样注释它们,它们会显示: 因此,这个定义: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")
@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>