Olá pessoal, estou tendo problemas para mapear um xml com o XStream. Se puderem dar uma ajuda agradeço. O conteúdo está em inglês porque foi o que mandei para a lista de discussão (e ninguém respondeu 
Agradeço qualquer ajuda.
Valeu, T+
Olá pessoal, estou tendo problemas para mapear um xml com o XStream. Se puderem dar uma ajuda agradeço. O conteúdo está em inglês porque foi o que mandei para a lista de discussão (e ninguém respondeu 
Agradeço qualquer ajuda.
Valeu, T+
Consegui resolver o problema, segue para referência:
final XStream xstream = new XStream();
Annotations.configureAliases(xstream, Result.class,
Clip.class, Artist.class, Band.class);
return (IResult) xstream.fromXML(result);
Mas agora estou com outro problema. Dentro do xml tenho um campo que não me interessa e não desejo mapelá-lo. Então como posso fazer isto? Ex.:
<CLIPS>
<CLIP ID="123"></CLIP>
<!-- loads of clip here -->
<UNDESIRABLE>0</UNDESIRABLE>
</CLIPS>
Porque se de alguma forma não indicar que não precisa processá-lo o XStream manda isto:
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: UNDESIRABLE: UNDESIRABLE
---- Debugging information ----
message : UNDESIRABLE: UNDESIRABLE
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : UNDESIRABLE: UNDESIRABLE
class : com.app.service.music.Result
required-type : java.util.ArrayList
path : /RESULT/CLIPS/UNDESIRABLE
line number : 18
-------------------------------
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:63)
Alguém já passou por isto ou sabe como solucionar?
Grato, T+
De acordo com o pessoal da lista de discussão do XStream não há uma forma de deixar de ler um elemento do xml, deve-se ler e ignorá-lo dentro do objeto.
T+
Tópico velho, mas que me ajudou.
Realmente, parece que (à rigor) vc tem que mapear todos os campos do xml (uma merda, diga-se de passagem. Tenho um xml aqui com [telefone removido] campos, onde só preciso de uns 5…).
Mas caçando na net, achei uma gambiarra aqui que resolveu esse problema:
Omit Unexpected XML Elements With XStream
Com isso, criei minha custom factory de XStream:
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.mapper.MapperWrapper;
public class CustomXStream {
public static XStream newCustomXStream() {
return new XStream(new DomDriver()) {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@Override
@SuppressWarnings("rawtypes")
public boolean shouldSerializeMember(Class definedIn, String fieldName) {
return !Object.class.equals(definedIn) && super.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
}
}
Agora, ao invés de fazer:
XStream xstream = new XStream(new DomDriver());
Eu faço:
XStream xstream = CustomXStream.newCustomXStream();
Gambiarra né, mas não entendo como os caras ainda não implementaram essa funcionalidade no XStream.
Enfim, só estou ressuscitando pq cai aqui, então talvez ajude os que porventura tbm caiam buscando solução pro mesmo problema! ^^
bronx,
Muito boa essa solução. É a melhor solução para quando queremos ignorar alguns campos.
bronx,Muito boa essa solução. É a melhor solução para quando queremos ignorar alguns campos.
:thumbup:
+1
???