2

非整列化しようとしている XML ファイルがありますが、その方法がわかりません。

XMLは次のようになります

<config>
    <params>
        <param>
            <a>draft</a>
            <b>Serial</b>
        </param>
        <param>
            <a>amt</a>
            <b>Amount</b>
        </param>
    </params>
    <server>
        <scheme>http</scheme>
        <host>somehost.com/asdf</host>
    </server>
</config>

以前は、ルート要素として params があり、ルート要素としてサーバー要素または構成がなかった場合に非整列化できました。

これをアンマーシャリングするために構成クラスを追加しましたが、どこが間違っているのかわかりません。

私のクラスは次のようになります

@XmlRootElement
public class Config {

    private Params params = new Params();

    @XmlElement(name="params")
    public Params getParams() {
        return params;
    }
    public void setParam(Params params) {
        this.params = params;
    }
}

public class Params {
    private List<Param> params = new ArrayList<Param>();

    public List <Param> getParam() {
        return params;
    }

    public void setParam(List<Param> params) {
        this.params = params;
    }
}

public class Param {
    String a;
    String b;        
    //getters and setters.  omitted for brevity     
}   

コードの非整列化

File file = new File("C:\\config.xml");
InputStream inputStream = new FileInputStream(file);
JAXBContext jc = JAXBContext.newInstance(Config.class);
Unmarshaller u = jc.createUnmarshaller();
conf = (Config) u.unmarshal(file);
System.out.println(conf.getParams().getParam().size());

println は 0 を出力します。どこで間違ったのでしょうか?

サーバーノードのコードがまだないことはわかっています。まだそこに到達していません。私の実際の XML にはまだそのノードがなく、config タグ内で params を正しく非整列化することはまだできません。

4

4 に答える 4

2

次の変更を行うだけで機能します。Config の setParams メソッドを次のように変更します。

@XmlElement(name = "params") //<--Annotation added here
public void setParam(Params params) {
    this.params = params;
}
于 2013-02-02T06:20:37.843 に答える
1

試す

@XmlRootElement
class Config {
    private List<Param> params = new ArrayList<Param>();

    @XmlElementWrapper
    @XmlElement(name="param")
    public List<Param> getParams() {
        return params;
    }

    public void setParams(List<Param> params) {
        this.params = params;
    }
}

class Param {
    String a;
    String b;
          ...
}
于 2013-02-02T05:47:02.670 に答える
0

Param とそのラッパーの両方が unmarsh されるべきだと思います。リストを unmarsh するだけですが、Param モデルも unmarsh する必要があります。

于 2013-02-02T05:51:29.163 に答える