Xstream прекращает запись в файл, когда не закончил - PullRequest
0 голосов
/ 08 июля 2019

Я написал некоторый код для генерации паролей для пользователей, которые были написаны в sql раньше.Затем я хотел написать каждому пользователю с именем пользователя и паролем в XML.Код, кажется, работает нормально, за исключением примерно 200-го пользователя, он внезапно останавливается на полпути через тег XML и заканчивается, что довольно странно.Я использую Xstream в качестве своей библиотеки.Arraylist насчитывает 215 пользователей.

Я пробовал StaxDriver и DomDriver.Результат Stax Driver был таким же, как у пустого конструктора Xstream, но Dom был еще хуже.

        XStream xstream = new XStream();
        xstream.alias("Zakaznici", ListZakazniku.class);

        try {
            PrintWriter out = new PrintWriter("Zakaznici.xml");
            out.write(xstream.toXML(ListZakazniku.zakaznici));
        }catch (Exception e){
            e.printStackTrace();
        }
public class ListZakazniku {
    public static ArrayList<Zakaznik> zakaznici = new ArrayList<>();

    public ListZakazniku(){
        zakaznici= new ArrayList<Zakaznik>();
    }

    public void setZakaznici(ArrayList<Zakaznik> zakaznik){
        this.zakaznici.clear();
        this.zakaznici = zakaznik;
    }

    public static ArrayList<Zakaznik> getZakaznici() {
        return zakaznici;
    }

    public void add(Zakaznik elbow){
        zakaznici.add(elbow);
    }

и заказник - довольно простой объект с именем пользователя, паролем, идентификатором ....

сокращение было похоже на

</Zakaznik>
<Zaka

Я нене знаю, что с ним не так.С нетерпением жду любых предложений :)

1 Ответ

0 голосов
/ 08 июля 2019

Ваш список не должен быть статичным, также немного изменен ваш печатный код.Подобный подход будет работать нормально:

@XStreamAlias("listZakazniku")
public class ListZakazniku {

    private List<Zakaznik> zakaznicis;

    public ListZakazniku() {
        zakaznicis = new ArrayList<Zakaznik>();
    }

    public void add(Zakaznik user) {
        zakaznicis.add(user);
    }


    @XStreamAlias("zakaznik")
    private static class Zakaznik {
        private String user;
        private String pwd;
        public Zakaznik(String user, String pwd) {
            this.user = user;
            this.pwd = pwd;
        }
    }


    public static void main(String[] args){
        XStream xstream = new XStream();
        xstream.processAnnotations(ListZakazniku.class);
        ListZakazniku ll = new ListZakazniku();
        ll.add(new Zakaznik("user1", "pwd1"));
        ll.add(new Zakaznik("user2", "pwd2"));
        try {
            try (PrintWriter out = new PrintWriter("Zakaznici.xml")) {
                out.println(xstream.toXML(ll));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Вывод:

<listZakazniku>
  <zakaznicis>
    <zakaznik>
      <user>user1</user>
      <pwd>pwd1</pwd>
    </zakaznik>
    <zakaznik>
      <user>user2</user>
      <pwd>pwd2</pwd>
    </zakaznik>
  </zakaznicis>
</listZakazniku>

Не забывайте вызов processAnnotations для каждого аннотированного класса!(также, ваш Zakaznik не является внутренним статическим классом, я думаю, как в моем примере выше, это было просто втиснуть в полный код ..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...