2015-05-11 5 views
1

Поэтому у меня есть следующий формат XML в строке:XML пропуском корневой элемент

<applist> 
    <app stuff="blah"/> 
    <app stuff="blah"/> 
</applist> 

Я хотел бы иметь список app

Так что я делаю это:

XStream xstream = new XStream(); 
xstream.alias("applist", List.class); 
List<Application> list = (List<Application>) xstream.fromXML(xml); //xml is what is above 

И вот мой объект:

@XmlRootElement(name = "app") 
public class Application{ 

    private String stuff; 

    public String getStuff() { 
     return stuff; 
    } 
    public void setStuff(String stuff) { 
     this.stuff = stuff; 
    } 
} 

Я думал, что xstream.alias("applist", List.class); должен был игнорировать корневой элемент ... в этом случае applist. Однако это не работает, и я получаю это исключение.

Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: app : app 
---- Debugging information ---- 
message    : app 
cause-exception  : com.thoughtworks.xstream.mapper.CannotResolveClassException 
cause-message  : app 
class    : java.util.ArrayList 
required-type  : java.util.ArrayList 
converter-type  : com.thoughtworks.xstream.converters.collections.CollectionConverter 
path    : /applist/app 
line number   : 4 
version    : null 
------------------------------- 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79) 
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) 
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) 
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1058) 
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1042) 
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:913) 
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:904) 
at TestStuff.main(TestStuff.java:19) 
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: app 
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:45) 
at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29) 
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:70) 
at com.thoughtworks.xstream.converters.collections.CollectionConverter.addCurrentElementToCollection(CollectionConverter.java:79) 
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:72) 
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:66) 
at com.thoughtworks.xstream.converters.collections.CollectionConverter.unmarshal(CollectionConverter.java:61) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 
... 10 more 

Так почему я получаю это исключение? Я бы подумал, что он будет разбираться довольно красиво.

UPDATE:

Я добавил xstream.alias("app", Application.class); и теперь ввод объектов в список. Тем не менее, значение stuff является null

ответ

0

я реализовал систему с использованием XStream и я не нашел серьезные проблемы, это большая библиотека для работы с XML :)

Я считаю, что вам не нужно регистрироваться «List.class», но только ваш «Application.class».

Я хотел бы сделать следующее:

XStream xstream = new XStream(new StaxDriver()); 
xstream.alias("app", Application.class); 
xStream.useAttributeFor(Application.class, "stuff"); 
List<Application> list = (List<Application>) xstream.fromXML(xml); 

Позвольте мне знать, если это работает для вас. Счастливое кодирование !!!

+0

Не повезло с этим ... Я получаю это: «Исключение в потоке» main »com.thoughtworks.xstream.mapper.CannotResolveClassException: applist' –

+0

Я добавил обновление, которое может помочь. –

+0

Вы пробовали комментировать вашу переменную «stuff» с помощью @XStreamAsAttribute? –

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

  • Нет связанных вопросов^_^