2

テーブル名、行数、および列のリストを持つテーブル 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>
...

しかし、@XmlAttribute を @XmlElement に変更すると、次のように表示されます。

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

「name」と「rowcount」を要素として取得するには、クラスに何を入れればよいですか?

4

1 に答える 1

0

この例で行う必要があるのは、に変更@XmlAttributeすることだけ@XmlElementです。投稿のようにメソッドのみがgetあり、setメソッドがない場合は、このユース ケースではデフォルトのアノテーションが適用されないため、アノテーションを明示的に追加する必要があり@XmlElementます (デフォルトでは、マップされていないすべてのプロパティに@XmlElementアノテーションがあると想定されます)。

テーブル

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>
于 2012-05-29T09:55:11.237 に答える