Кастор: как отобразить простой список строк? - PullRequest
2 голосов
/ 08 апреля 2010

В моем классе есть следующее поле:

private List<String> messages;

Вот отображение, которое у меня есть:

<field name="messages" collection="arraylist" type="string" container="false>
  <bind-xml name="errors" node="element"/>
</field>

Вот что я получаю в результате сортировки:

<errors><string>message1</string><string>message2</string></errors>

И вот чего я хочу достичь:

<errors><error>message1</error><error>message2</error></errors>

Любая помощь приветствуется!

Ответы [ 3 ]

2 голосов
/ 08 апреля 2010

Есть ли причина, по которой вы используете Marshalling для достижения этой цели?Он будет иметь заданный способ определения вывода XML, чтобы он знал, как воссоздать объекты при демаршаллинге.Поэтому, если вы действительно хотите вывод XML с использованием маршаллинга, я думаю, вам нужно создать новый тип с именем Error, и ваш список будет:

private List<Error> messages;

И отображение:

<field name="messages" collection="arraylist" type="error" container="false>
  <bind-xml name="errors" node="element"/>
</field>

В качестве альтернативы, если вы просто хотите создать вывод в формате xml и ваш контент на самом деле так же прост, как и то, что вы указали выше, вы можете просто написать метод toXml (), который циклически перебирает список, добавляя контент именно так, как вы этого хотите.Обратное можно сделать с помощью метода fromXml (), который анализирует XML с использованием DOM или SAX и перестраивает список строк.

1 голос
/ 10 июля 2010

Почему бы не использовать JAXB?

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

    @XmlRootElement
    public class Errors {

        private List<String> messages;

        @XmlElement(name="error")
        public List<String> getMessages() {
            return messages;
        }

        public void setMessages(List<String> messages) {
            this.messages = messages;
        }

    }

Если вам нравится внешний файл привязки, вы можете использовать EclipseLink JAXB (MOXy) :

<?xml version="1.0" encoding="UTF-8"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
    <java-types>
        <java-type name="Errors">
            <xml-root-element/>
            <java-attributes>
                <xml-element java-attribute="messages" name="error"/>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>
0 голосов
/ 04 марта 2017

Я знаю, что об этом спрашивали давным-давно, но вы можете рассмотреть возможность использования container="true".

...