0

私たちの Java アプリケーションでは、ユーザーから提供された値の複数のセットを保存する必要があります。このデータを処理するために、ArrayList < ArrayList < Object > > を使用しています。このデータを JAXB マーシャラーに送信すると、XMLElementWrapper と XMLElement の名前が書き込まれますが、各 XMLElement の内容は書き込まれません。この各 XMLElement は内部 ArrayList である必要があります。アンマーシャルすると、同じサイズの ArrayList が得られますが、内部の ArrayList の内容は空で、サイズはゼロです。

マーシャリングおよびアンマーシャリング中に期待どおりに動作する同じクラスに、別の単一の ArrayList < Object > 実装があります。

ArrayList < ArrayList < Object > > 型のオブジェクトをマーシャリングする場合、どこで問題が発生する可能性がありますか?

4

2 に答える 2

0

メイン変数がリストである場合、そのリストには、それ自体がArrayList型のオブジェクトを含めることができると思います。したがって、ArrayListと同じ構造を定義できるため、ArrayListとして定義する必要がない場合があります。

あなたが試みるかもしれないもう一つのオプションは、基本的にリストを含む別のクラスを作ることです。次に、メインクラスをArrayListにすることができ、YourClassに実際に独自のリストを含めることができます。

また、ArrayListの代わりにListを使用することをお勧めします。私が最初にJavaを起動したとき、私はArrayListも使用していましたが、より一般的なListインターフェースを使用したいと考えています。ArrayListおよびその他の型はListインターフェースを実装しているため、下の型が変更された場合に備えて、変数をListとして定義する必要があります。

于 2012-09-23T14:39:14.073 に答える
0
@XmlJavaTypeAdapter(IdAdapter.class)
private ArrayList<ArrayList<String>> _dataSet = null;

private static class IdAdapter extends XmlAdapter<RowList, ArrayList<ArrayList<String>>>
{

    @Override
    public ArrayList<ArrayList<String>> unmarshal(RowList v)
            throws Exception
    {
        ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
        for(ColumnList myList:v.rowList)
        {
            list.add(myList.columnList);
        }
        return list;
    }

    @Override
    public RowList marshal(ArrayList<ArrayList<String>> v)
            throws Exception
    {
        RowList rowList = new RowList();
        for(ArrayList<String> innerList:v)
        {
            ColumnList myList = new ColumnList();
            myList.columnList = innerList;
            rowList.rowList.add(myList);
        }
        return rowList;
    }
}

@XmlRootElement(name="RowList")
private static class RowList
{
    @XmlElement(name="RowValues")
    ArrayList<ColumnList> rowList = new ArrayList<SpoolDataSet.ColumnList>();
}

@XmlRootElement(name="ColumnList")
private static class ColumnList 
{
    @XmlElement(name="ColumnValues")
    ArrayList<String> columnList = new ArrayList<String>();
}

ArrayList> に対してこれを行ったので、文字列をオブジェクトに変更することもできます。

于 2013-02-12T12:20:34.060 に答える