Pessoal,
Estou usando o XStream para ler um XML relativamente muito fácil. Implementei todos os beans e para criar o XML a partir dos JavaBeans criados, fuinciona perfeitamente. Porém, quando eu tenho o XML obtido externamente, ele da um erro muito louco. Já vasculhei o Google para ver se alguém tinha passado por isso, e acabei não achando nada. Estou recorrendo a vocês para ver se alguém já enfrentou algo parecido com isso.
Bom vamos lá. O XML que eu tenho que ler é o da API do Twitter. É igual a esse abaixo:
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
<created_at>Tue Mar 24 23:15:16 +0000 2009</created_at>
<id>1384672137</id>
<text>zzzzzZZZzzzzz zzz ZZZZzzzzzz. ZzzZzzzzzzzZzzzz. Zzzzz zz. Zzzzz</text>
<source><a href="http://www.atebits.com/software/tweetie/">Tweetie</a></source>
<truncated>false</truncated>
<in_reply_to_status_id></in_reply_to_status_id>
<in_reply_to_user_id></in_reply_to_user_id>
<favorited>false</favorited>
<in_reply_to_screen_name></in_reply_to_screen_name>
<user>
<id>16428990</id>
<name>Alex </name>
<screen_name>Xlex</screen_name>
<location>Amsterdam</location>
<description>Hi ! I'm Alex . Im an artist , designer , and a musician. Oh and i LOVE to twittt !!!!!!!!</description>
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/61499379/photo-3c_normal.JPG</profile_image_url>
<url></url>
<protected>false</protected>
<followers_count>583</followers_count>
</user>
</status>
<status>
<created_at>Tue Mar 24 23:14:50 +0000 2009</created_at>
<id>1384669752</id>
<text>Going to sleep, feeling so lonely :( so diprest. SleepSweet Twitterrrr !</text>
<source><a href="http://www.atebits.com/software/tweetie/">Tweetie</a></source>
<truncated>false</truncated>
<in_reply_to_status_id></in_reply_to_status_id>
<in_reply_to_user_id></in_reply_to_user_id>
<favorited>false</favorited>
<in_reply_to_screen_name></in_reply_to_screen_name>
<user>
<id>16428990</id>
<name>Alex </name>
<screen_name>Xlex</screen_name>
<location>Amsterdam</location>
<description>Hi ! I'm Alex . Im an artist , designer , and a musician. Oh and i LOVE to twittt !!!!!!!!</description>
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/61499379/photo-3c_normal.JPG</profile_image_url>
<url></url>
<protected>false</protected>
<followers_count>583</followers_count>
</user>
</status>
<status>
<created_at>Tue Mar 24 22:14:10 +0000 2009</created_at>
<id>1384364371</id>
<text>Vai nessa, monkey boy: http://tinyurl.com/c4v65s</text>
<source><a href="http://twitterfox.net/">TwitterFox</a></source>
<truncated>false</truncated>
<in_reply_to_status_id></in_reply_to_status_id>
<in_reply_to_user_id></in_reply_to_user_id>
<favorited>false</favorited>
<in_reply_to_screen_name></in_reply_to_screen_name>
<user>
<id>8524192</id>
<name>Eustáquio Rangel</name>
<screen_name>taq</screen_name>
<location>São José do Rio Preto, SP, Bra</location>
<description>http://eustaquiorangel.com/me</description>
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/56074459/taqblack_normal.jpg</profile_image_url>
<url>http://eustaquiorangel.com</url>
<protected>false</protected>
<followers_count>456</followers_count>
</user>
</status>
</statuses>
Meus Beans estão implementados assim:
package com.jforbidtwitt.xml.beans;
import java.util.ArrayList;
import java.util.List;
public class Statuses {
private String type;
private List<Status> status = new ArrayList<Status>();
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void add(Status status) {
this.status.add(status);
}
public List<Status> getContent() {
return this.status;
}
}
[code]package com.jforbidtwitt.xml.beans;
public class Status {
private String created_at;
private String id;
private String text;
private String source;
private boolean truncated;
private String in_reply_to_status_id;
private String in_reply_to_user_id;
private boolean favorited;
private String in_reply_to_screen_name;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getCreated_at() {
return created_at;
}
public void setCreated_at(String created_at) {
this.created_at = created_at;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public boolean isTruncated() {
return truncated;
}
public void setTruncated(boolean truncated) {
this.truncated = truncated;
}
public String getIn_reply_to_status_id() {
return in_reply_to_status_id;
}
public void setIn_reply_to_status_id(String in_reply_to_status_id) {
this.in_reply_to_status_id = in_reply_to_status_id;
}
public String getIn_reply_to_user_id() {
return in_reply_to_user_id;
}
public void setIn_reply_to_user_id(String in_reply_to_user_id) {
this.in_reply_to_user_id = in_reply_to_user_id;
}
public boolean isFavorited() {
return favorited;
}
public void setFavorited(boolean favorited) {
this.favorited = favorited;
}
public String getIn_reply_to_screen_name() {
return in_reply_to_screen_name;
}
public void setIn_reply_to_screen_name(String in_reply_to_screen_name) {
this.in_reply_to_screen_name = in_reply_to_screen_name;
}
}
[/code]
[code]package com.jforbidtwitt.xml.beans;
public class User {
private String name;
private String screen_name;
private String location;
private String description;
private String profile_image_url;
private String url;
private boolean protect;
private int followers_count;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getScreen_name() {
return screen_name;
}
public void setScreen_name(String screen_name) {
this.screen_name = screen_name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getProfile_image_url() {
return profile_image_url;
}
public void setProfile_image_url(String profile_image_url) {
this.profile_image_url = profile_image_url;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public boolean isProtect() {
return protect;
}
public void setProtect(boolean protect) {
this.protect = protect;
}
public int getFollowers_count() {
return followers_count;
}
public void setFollowers_count(int followers_count) {
this.followers_count = followers_count;
}
}
[/code]
E para ler o XML estou fazendo assim:
[code]package com.jforbidtwitt.xml;
import com.jforbidtwitt.xml.beans.Status;
import com.jforbidtwitt.xml.beans.Statuses;
import com.jforbidtwitt.xml.beans.User;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XMLRead {
public static Statuses readXML(String xml) {
System.out.println();
XStream xs = new XStream(new DomDriver());
xs.alias("statuses", Statuses.class);
xs.alias("status", Status.class);
xs.alias("user", User.class);
xs.aliasAttribute(Statuses.class, "type", "type");
xs.addImplicitCollection(Statuses.class, "status");
xs.aliasField("protect", User.class, "protected");
Statuses res = (Statuses) xs.fromXML(xml);
System.out.println(res);
return res;
}
}[/code]
E finalmente, porém muito importante, o erro cabuloso que o XStream gera:
Alguém consegue ter alguma luz nesse túnel sombrio?
Obrigado