2013-07-12 66 views
0

我有一個類,我試圖將一個Bookstore類和一個Books列表對象添加到對象列表中。但是,在添加書籍列表時出現類型轉換錯誤。無法將對象和列表一起添加到對象列表

這裏是我的REST客戶端:

public class Test { 

public static void main(String[] args) { 

    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    WebResource service = client.resource(getBaseURI()); 

    ResponseList responseList = service.path("rest").path("BookMain/get").accept(MediaType.APPLICATION_XML).get(ResponseList.class); 
    BookStore bs = (BookStore) responseList.getList().get(0); 
    ArrayList<Book> lb = (ArrayList<Book>) responseList.getList().get(1); 
} 

這裏是我的類,它是增加的書籍書店對象和列表:

@GET 
@Path("/get") 
@Produces(MediaType.APPLICATION_XML) 
public ResponseList addObjects() { 

    BookStore bookstore = new BookStore(); 
    bookstore.setName("Prateek Bookstore"); 
    bookstore.setLocation("Vasanth Nagar"); 

    Book book1 = new Book(); 
    book1.setName("Book2"); 
    book1.setAuthor("Author2"); 

    Book book2 = new Book(); 
    book2.setName("Book3"); 
    book2.setAuthor("Author3"); 

    ArrayList<Book> Blist = new ArrayList<Book>(); 
    Blist.add(book1); 
    Blist.add(book2); 

    ArrayList<Object> list = new ArrayList<Object>(); 
    list.add(bookstore); 
    list.addAll(Blist); 

    ResponseList books = new ResponseList(); 
    books.setList(list); 

    return books; 
} 

這是錯誤:

Exception in thread "main" java.lang.ClassCastException:Book cannot be cast to java.util.ArrayList 

這是我的ResponseList:

@XmlRootElement 
@XmlSeeAlso({BookStore.class,Book.class,Hello.class}) 
public class ResponseList { 

    private List<Object> list; 

    public List<Object> getList() { 
     return list; 
    } 
    public void setList(List<Object> list) { 
     this.list = list; 
    } 
} 

這是圖書城等級:

@XmlRootElement 
@XmlType(propOrder = {"name", "location"}) 
public class BookStore { 

    private String name; 
    private String location; 

    public String getName() { 
     return name; 
    } 
    public String getLocation() { 
     return location; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public void setLocation(String location) { 
     this.location = location; 
    } 
} 

這是Book類:

@XmlRootElement 
public class Book { 

    private String name; 
    private String author; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getAuthor() { 
     return author; 
    } 
    public void setAuthor(String author) { 
     this.author = author; 
    } 
} 

雲誰能告訴我什麼,我做錯了什麼?

+0

什麼是'ResponseList'?你會怎麼做一個'List '映射到XML? – 2013-07-12 11:40:23

+0

現在請添加'@ XmlSeeAlso'中的類。 – 2013-07-12 11:48:33

+0

@Tichodroma添加了,請看看。 – Prats

回答

1

看你的測試類的最後一行:

ArrayList<Book> lb = (ArrayList<Book>) responseList.getList().get(1); 

如果evalulate

responseList.getList().get(1); 

我想你會發現這本書返回的一個實例。您正在嘗試將其轉換爲ArrayList。

如果你看看你的addObjects方法:

Book book1 = new Book(); 
book1.setName("Book2"); 
book1.setAuthor("Author2"); 

Book book2 = new Book(); 
book2.setName("Book3"); 
book2.setAuthor("Author3"); 

ArrayList<Book> Blist = new ArrayList<Book>(); 
Blist.add(book1); 
Blist.add(book2); 

ArrayList<Object> list = new ArrayList<Object>(); 
list.add(bookstore); 
list.addAll(Blist); 

您添加「Blist」的所有項目到ArrayList添加書店後,所以這個ArrayList中的第二個元素是一本書。

試着改變你的測試類的最後一行

Book book1 = (Book) responseList.getList().get(1); 
Book book2 = (Book) responseList.getList().get(2); 
+0

號'List.addAll(List l)'不會加'l',但是'l'的每個元素。 – 2013-07-12 12:46:21

+0

如果你有'list.add(Blist)',第二個元素將是一個ArrayList,但是你有'list.addAll(Blist)'這將把每本書添加爲一個元素。 – CarlHembrough

+0

@Carl Hembrough所以你是否告訴我將Arraylist 更改爲我的REST客戶端中的Books? – Prats

1

您有其他問題時使用Collection<Object>而不是ArrayList<Object>。你總是可以嘗試創建一個通用的方法,如:

編輯:nvm閱讀下面。

您正在將Bookstore對象放入arrayList,然後是book對象。將它們放入arrayList時,這些物體必須相同。

EDIT2:更改主這個第2至最後一行:

ArrayList<BookStore> bsList = (BookStore) responseList.getList().get(0); 
BookStore bs = bsList.get(0); 
+0

這是爲什麼?這是如何解決問題的? – 2013-07-12 12:42:02

+0

@Stephen D請問,我如何從REST客戶端檢索它? – Prats

+0

我再次編輯了我的答案。 –