2

私のコードはしばらくの間正常に機能していました。いくつか変更したところ、正しくアンマーシャリングされなくなった整数のリストがいくつかあります。問題を取り除くために、すべてを次のように煮詰めましたが、問題は解決しません。

XML ファイルを、コンテンツ全体が含まれるテスト ファイルに減らしました。

<polylist>
    <p>1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5</p>
</polylist>

私は自分の Java コードを、コンテンツ全体が含まれるテスト ファイルにまで減らしました。

import java.io.File;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "polylist")
public class PolyList
{
    public List<Integer> p;

    public static void main(String[] args) throws Exception
    {
        JAXBContext jaxbContext = JAXBContext.newInstance(PolyList.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        PolyList pl = (PolyList)unmarshaller.unmarshal(new File("ptest.xml"));
        System.out.println(pl.p);
    }
}

pl.p を印刷すると、期待され[1291596391]たものとは異なる出力が得られ[1 0 0 0 0 1 2 ...]ます。に変更public List<Integer> p;すると、期待どおりpublic List<String> p;に正しく出力[1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5]されます。したがって、 a は正しく取得しますが、 は取得しList<String>ませんList<Integer>List<Integer>数日前に完全な本番プロジェクトで正常に機能していましたが、もう機能していません。

(編集) 実際、このList<String>バージョンも動作していません。数字の間にコンマはありません。つまり、複数の文字列のリストが表示されていないことを意味し、各文字列は異なる数字を表しています。むしろ、全体を表す 1 つの String のままです。

それを指摘してくれてありがとう、ブレイズ。早く気が付かなかった私のミスです。

4

1 に答える 1

3

@XmlListフィールドで注釈を使用する必要がありpます。

@XmlList
public List<Integer> p;

アップデート

以下は真実です。その理由についてさらに調査する必要があります。

javax.xml.bind.DatatypeConverter.parseInt("1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5") == 1291596391

公開リスト p; を変更すると、公開リスト p; 次に、期待どおり [1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5] を正しく出力します。

に変更すると、 という1 つのエントリを持つList<String>が取得されます。注釈を使用すると、多くの項目があることを示す出力が得られます。List1 0 0 0 0 1 2 0 2 3 1 3 1 1 4 2 1 5@XmlList[1, 0, 0, 0, 0, 1, 2, 0, 2, 3, 1, 3, 1, 1, 4, 2, 1, 5]List

于 2013-08-14T17:15:52.337 に答える