Я написал некоторый код для генерации паролей для пользователей, которые ранее были написаны для 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
Я не знаю, что с этим не так. Жду любых предложений :)




Ваш список не должен быть статичным, также немного изменен ваш код печати. Такой подход будет работать нормально:
@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 для каждого аннотированного класса! (Кроме того, ваш заказник не является внутренним статическим классом, я думаю, как и в моем примере выше, это было просто для того, чтобы втиснуть полный код..)
Большое спасибо, это действительно помогло мне :)