Olá pessoal!
Estive tentando fazer um ‘core’ de leitor RSS, mas estou tento executar e lança Conversion Exception. Já mudei bastante coisa, mas até agora não mudou nada, sempre o mesmo erro… Não é problema de conexão, pois ele para no meio da leitura… Aí vai o código e o RSS que estou tentando ler.
Classe RSS
public class RSS {
private Channel channel;
public Channel getChannel(){
return channel;
}
public void setChannel(Channel channel){
this.channel = channel;
}
}
Classe Channel
public class Channel {
private String title = "";
private String link = "";
private String description = "";
private String language = "";
private ArrayList<Item> item;
private String lastBuildDate = "";
private String docs = "";
private String generator = "";
private String webMaster = "";
//getters e setters...
}
Classe Item
public class Item {
private String title = "";
private String link = "";
private String description = "";
private String pubDate = "";
private String guid = "";
//getters e setters
}
Classe RSSXmlParser
public class RSSXmlParser {
private BufferedReader breader;
private URL url;
private InputStreamReader isr;
private String path;
private XStream xs;
public RSSXmlParser(String path) {
this.path = path;
}
public RSS populate() throws MalformedURLException, IOException{
url = new URL(path);
isr = new InputStreamReader(url.openStream());
breader = new BufferedReader(isr);
System.out.println("Leitor pronto = " + breader.ready() + "\n");
xs = new XStream();
xs.alias("rss", new RSS().getClass());
return (RSS) xs.fromXML(breader);
}
}
e Classe Test
public class Test {
public Test() {
}
public static void main(String[] args) {
String path = "http://www.baboo.com.br/rss/default.asp";
RSS rss = new RSS();
RSSXmlParser rxp = new RSSXmlParser(path);
System.out.println("Path = " + path);
System.out.println("INÍCIO DE RSS\n");
try {
rss = rxp.populate();
} catch (MalformedURLException ex) {
System.out.println("URL INVÁLIDA");
ex.printStackTrace();
} catch (IOException ex) {
System.out.println("ERRO DE CONEXÃO");
ex.printStackTrace();
}
Channel c = rss.getChannel();
System.out.println("Título = " + c.getTitle());
System.out.println("Descrição = " + c.getDescription());
System.out.println("Link = " + c.getLink());
System.out.println("Língua = " + c.getLanguage());
System.out.println("LastBuildDate = " + c.getLastBuildDate());
System.out.println("Docs = " + c.getDocs());
System.out.println("Generator = " + c.getGenerator());
//e por aí vai...
System.out.println("FIM DE RSS");
}
}
Ah, a exception que está gerando:
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: title : title
---- Debugging information ----
message : title : title
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : title : title
class : RSS.RSS
required-type : java.util.ArrayList
path : /rss/channel/item/title
line number : 13
class : RSS.RSS
required-type : java.util.ArrayList
path : /rss/channel/item/title
line number : 13
class : RSS.RSS
required-type : java.util.ArrayList
path : /rss/channel/item/title
line number : 13
-------------------------------
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:63)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
at com.thoughtworks.xstream.annotations.AnnotationReflectionConverter.unmarshallField(AnnotationReflectionConverter.java:52)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:169)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:121)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
at com.thoughtworks.xstream.annotations.AnnotationReflectionConverter.unmarshallField(AnnotationReflectionConverter.java:52)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:169)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:121)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:45)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:46)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:117)
at com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:29)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:832)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:819)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:767)
at parser.RSSXmlParser.populate(RSSXmlParser.java:45)
at Test.main(Test.java:34)
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: title : title
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:49)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:72)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.CGLIBMapper.realClass(CGLIBMapper.java:40)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:60)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:76)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:26)
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:34)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:62)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:57)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.unmarshal(CollectionConverter.java:50)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:56)
... 21 more
Java Result: 1
Já tentei trocar aquela ArrayList por ArrayList, por Item[] e por Item, mas a Exception é sempre a mesma…
Já dei uma boa olhada por aqui e não acheo mada…
Alguém sabe o que pode ser??
Desde já, grato.