23

以下の単純化された例では:

期待どおり、次のようになります。

{"person":{"name":"john","tags":["tag1","tag2"]}}

ただし、タグを 1 つだけ設定すると、次のようになります。

{"person":{"name":"john","tags":"tag1"}}

そして、私はこれを期待していました:

{"person":{"name":"john","tags":["tag1"]}}

つまり、配列には 1 つの要素しかないため、jettison はタグの配列を削除しました。

これはかなり危険だと思います。

要素が1つしかない場合でも、jettisonに配列を強制的に書き込む方法は?

注: StAXON など、投棄の代替手段があることは承知しています。ただし、ここでは、Jettison を使用してこれを実現する方法を尋ねています。投棄に代わる別の方法を提案しないでください。

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.*;

import java.io.*;
import javax.xml.bind.*;
import javax.xml.stream.XMLStreamWriter;
import org.codehaus.jettison.mapped.*;


public class JettisonTest {
    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Person.class);

        Person person = new Person();
        person.name = "john";
        person.tags.add("tag1");
        person.tags.add("tag2");

        Configuration config = new Configuration();
        MappedNamespaceConvention con = new MappedNamespaceConvention(config);
        Writer writer = new OutputStreamWriter(System.out);
        XMLStreamWriter xmlStreamWriter = new MappedXMLStreamWriter(con, writer);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.marshal(person, xmlStreamWriter);
    }
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Person {
    String name;
    List<String> tags = new ArrayList<String>();
}
4

1 に答える 1