2013-01-09 2 views
0

Мне нужно сделать ссылку между элементами из двух списков. Я пробовал использовать XStream. Вот пример XML:Как ссылаться на два списка друг друга в XStream?

<bookshop> 
    <authors> 
     <author id="a1"> 
      <name>Stanisław</name> 
     </author> 
    </authors> 
    <books> 
     <book id="b1"> 
      <author>a1</author> 
      <title>Ubik</title> 
      <price currency="PLN">29.0</price> 
     </book> 
    </books> 
</bookshop> 

и некоторые царапины моих классов Java:

public class Bookshop { 
    private ArrayList<Author> authors; 
    private ArrayList<Book> boooks; 
} 

public class Book { 
    @XStreamAsAttribute 
    private String id; 
    private Author author; 
    private String title; 
    private Price price; 
} 

@XStreamConverter(value=ToAttributedValueConverter.class, strings={"value"}) 
public class Price { 
    private double value; 
    @XStreamAsAttribute 
    private String currency; 
} 

public class Author { 
    @XStreamAsAttribute 
    private String id; 
    private String name; 
    private String surname; 
} 

И каждый раз, когда я пытаюсь поставить XML в классы я получаю обнуляет в поле Автор Автор. Возможно, мне нужна еще одна аннотация, но я ничего не нашел в документах Xstream.

ответ

0

Ваш XML неправ. Вот что XStream дает, если вы попытаетесь сериализовать экземпляр Bookshop:

<bookshop> 
    <authors> 
    <author> 
     <id>a1</id> 
     <name>Yuri</name> 
     <surname>Stanislaw</surname> 
    </author> 
    <author> 
     <id>a2</id> 
     <name>Bill</name> 
     <surname>Gates</surname> 
    </author> 
    </authors> 
    <books> 
    <book> 
     <id>b1</id> 
     <author reference="/bookshop/authors/author[2]"/> 
     <title>Programming basics</title> 
     <price> 
     <currency>USD</currency> 
     <value>100.0</value> 
     </price> 
    </book> 
    </books> 
</bookshop> 

XML выше сериализовано со следующими параметрами:

xstream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES); 
xstream.alias("bookshop", Bookshop.class); 
xstream.alias("author", Author.class); 
xstream.alias("book", Book.class); 

Полный исходный код, который я использовал для тестирования можно найти here

Если это не является достаточным решением для справки, я бы предложил написать свой собственный Converter для использования с XStream, так как hort можно найти here

+0

Благодарим за ответ. Конечно, это неправильно, я ошибся с пастой/срезанием, извините: | А также вы подтвердили мои подозрения в отношении конвертера, поэтому я иду в хорошем смысле. – user1964668

+0

Я, однако, не понимаю, зачем вам нужен конвертер, все работает так, как есть (сериализация и неэтериализация «Книжного магазина»). Но, конечно, может быть аспект ваших проектов, которые я не вижу. – atomman

+0

Да, это хорошо работает, но я ограничен файлом xml. Этот файл не может содержать ссылку на этот рисунок '', скорее таким образом ' a32'. – user1964668

Смежные вопросы