1

私のコードには、次の Bean があります。

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Data implements Serializable {

@XmlAttribute
private String _name;

@XmlElementWrapper(name = "statuses")
@XmlElement(name="status")
    private List<Boolean> _statuses;

public String getName() {
    return _name;
}

public void setName(String name) {
    _name = name;
}

    public List<Boolean> getStatuses() {
        return _statuses;
    }

    public void setStatuses(List<Boolean> statuses) {
        _statuses = statuses;
    }

 ....

}

これは、Bean をマーシャリングするコードです。

Writer w = null;
    try {
        final JAXBContext context = JAXBContext.newInstance(Data.class);
        final Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        w = new FileWriter("file.xml");
        m.marshal(obj, w);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try { w.close();}
        catch (Exception e) {}
    }

私が期待するものは次のとおりです。

<data name="data-test">
<statuses>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
</statuses>
...
</data>

しかし、私は得ました:

<data name="data-test">
<statuses>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
    <status>true</status>
</statuses>

// strange repetition
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>
<statuses>true</statuses>

// attribute as separated element
<name>data-test</name>
...
</data>

どうすればそのような奇妙な繰り返しを避けることができますか?

4

2 に答える 2

0

私の推測では、アクセスタイプが機能していないと思います。やってみましたXmlAccessType.FIELDか?また、クラスが正しくコンパイルされていること、およびクラスパスが正しく設定されていることを確認してください(以前のテストの古いクラスが存在する可能性がありますか?)。

アップデート:

@XmlTransientゲッター/セッターに明示的に追加してみてください。

于 2012-04-28T13:35:34.427 に答える
0

JDK 1.6.24 のビルトイン jaxb のバグのようです

于 2012-04-28T15:45:57.340 に答える