2013-07-08 7 views
2

Мне нужно прочитать кучу XML в модель домена Java с помощью XStream 1.4.4. Я использовал JAXB для создания классов домена из XSD, заменил некоторые аннотации на кажущуюся подходящую @XSteeamAlias ​​(хотя это пока не имеет никакого значения). Я еще не лишил все компоненты JAXB, потому что у меня здесь много классов, и пока, похоже, слишком рано.ConversionException/CannotResolveClassException в XStream 1.4.4

Ошибка во втором теге XML с текстовым контентом. Не первый, как ни странно.

Вот моя ошибка:

com.thoughtworks.xstream.converters.ConversionException: dateFrom : dateFrom 
---- Debugging information ---- 
message    : dateFrom 
cause-exception  : com.thoughtworks.xstream.mapper.CannotResolveClassException 
cause-message  : dateFrom 
class    : java.util.ArrayList 
required-type  : java.util.ArrayList 
converter-type  : com.thoughtworks.xstream.converters.collections.CollectionConverter 
path    : /requestedCompany/companyItself/contactDetails/address/dateFrom 
line number   : 7 
class[1]   : nl.foo.domain.ContactDetails 
converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter 
class[2]   : nl.foo.domain.YCompanyType 
class[3]   : nl.foo.domain.RequestedCompany 
version    : null 
------------------------------- 
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.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) 
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 
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) 

Вот начало XML Я пытаюсь разобрать:

<?xml version="1.0" encoding="ISO-8859-1"?><requestedCompany xmlns="http://www.graydon.nl/XSellence/scorePlus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<companyItself graydonCompanyIdentificationNumber="891974008"> 
<bla>bla</bla> 
<contactDetails> 
<companyName>WONINGTEXTIEL JAMO --VOORBEELDRAPPORT--</companyName> 
<address status="huidig" type="20"> 
<dateFrom>1995-8-12</dateFrom> 
<street> 
<streetName>HAARLEMMERSTRAAT</streetName> 
<houseNumber>179</houseNumber> 
</street> 

ContactDetails.java выглядит следующим образом:

public class ContactDetails { 

@XStreamAlias("companyName") 
protected String companyName; 
@XStreamAlias("tradeName") 
protected List<TradeName> tradeName; 
@XStreamAlias("address") 
protected List<YAddress> address; 
@XStreamAlias("telephoneNumber") 
protected List<YTelephone> telephoneNumber; 
@XStreamAlias("faxNumber") 
protected List<YTelephone> faxNumber; 
} 

Я Я не уверен, что мне нужны все эти псевдонимы. Они, кажется, не помогают или не болят.

Когда я удаляю тег dateFrom, происходит сбой на улице. Когда я удаляю это, он терпит неудачу в следующем теге и т. Д. Интересно, что он не терпит неудачу в имени companyName или неподдерживаемом теге «bla», который я добавил сам.

Редактировать: Похоже, проблема связана со списками. Это всегда первый элемент в объекте в списке, который терпит неудачу. Адрес находится в списке, поэтому все поля в адресе вызывают ошибки.

ответ

1

Отвечая на мой собственный вопрос для потомков: это действительно списки. Перед каждым списком мне нужно поставить @XStreamImplicit(itemFieldName ="address")

Это делает его правильным списком.