3

何らかの理由で、要素のすべての値が2回書き込まれます。私のテストケースは非常に単純です。

package test;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name="root")
public class TestBean {

    private String name = null;

    @XmlElement(name="lastname")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

次に、ドキュメントをファイルシステムにマーシャリングしてXMLにします。

    TestBean object = new TestBean();
    object.setName("abc ");
    Class<?> clazz = object.getClass();
    JAXBContext context = JAXBContext.newInstance(clazz);
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
    m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
    m.marshal(object, new File("test.xml"));

結果のXMLは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <lastname>abc abc </lastname>
</root>

簡単にするために、名前空間の定義を含むpackage-info.javaファイルを削除しました。

私が使用している実装はorg.eclipse.persistence.moxy2.1.2です。パッケージフォルダーのjaxb.propertiesファイルには次の行が含まれています。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

ヒントをありがとう。

4

2 に答える 2

3

これは、EclipseLink2.3.0ストリームで修正された既知のMOXyの問題です。EclipseLink 2.3.0のダウンロードは、次の場所から入手できます。

EclipseLink 2.1.2の回避策は、別のアクセスタイプを使用するか、対応するフィールドに@XmlTransientアノテーションを付けることです。

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name="root")
public class TestBean {

    @XmlTransient
    private String name = null;

    @XmlElement(name="lastname")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
于 2011-01-27T14:21:30.247 に答える
1

私はあなたのテストを試しました、そしてそれは私のために正しい出力を与えます:

<root>
    <lastname>abc </lastname>
</root>

それはJAXB2の実装である可能性があります(私の場合はmoxyであるのに対し、私のテストではネイティブのJDK1.6ベースのJAXB2です)。

于 2011-01-27T14:25:22.047 に答える