Я хочу прочитать содержимое двух файлов xml
, содержащих информацию, хранящуюся как ArrayList
, из двух классов. Мне нужно использовать XStream
, и у меня нет проблем с записью файлов, но чтение из они, похоже, вызывают проблемы. Эти два класса:XStream не может найти конкретный класс для unmarshall XML
public class CreditCard
{
private String creditCard;
private ArrayList<String> tokens;
public CreditCard(String creditCard, ArrayList<String> tokens)
{
this.creditCard = creditCard;
this.tokens = tokens;
}
}
и
public class Account
{
private String username;
private String password;
private AccessRights accessRights;
public Account(String username, String password, AccessRights accessRights)
{
this.username = username;
this.password = password;
this.accessRights = accessRights;
}
}
Где AccessRights
просто `
public enum AccessRights {
FULL_RIGHTS,
TOKENS_ONLY,
CREDIT_CARD_ONLY;
}
Я пишу файлы в основной функции для тестирования.
public static void main(String[] args) throws IOException, ClassNotFoundException
{
XStream xstream = new XStream(new StaxDriver());
Writer someWriter = new FileWriter("Accounts.xml");
ObjectOutputStream out = xstream.createObjectOutputStream(someWriter);
Account one = new Account("Pesho", "0000", AccessRights.FULL_RIGHTS);
Account two = new Account("Kosio", "0809", AccessRights.TOKENS_ONLY);
ArrayList<Account> accounts = new ArrayList<>();
accounts.add(one);
accounts.add(two);
xstream.alias("account", Account.class);
out.writeObject(accounts);
out.close();
XStream xstreamcr = new XStream(new StaxDriver());
Writer someWritercr = new FileWriter("CreditCards.xml");
ObjectOutputStream outcr = xstreamcr.createObjectOutputStream(someWritercr);
ArrayList<String> tokens = new ArrayList<>();
tokens.add("1234243434269991");
tokens.add("7892641434269991");
CreditCard crone = new CreditCard("4563960122019991", tokens);
ArrayList<CreditCard> test = new ArrayList<>();
xstreamcr.alias("creditcard", CreditCard.class);
test.add(crone);
outcr.writeObject(test);
outcr.close();
}
Я хочу иметь функцию void, которая читается из этих файлов. Что-то вроде этого:
public void read(){
ArrayList<Account> accountsin;
XStream xstreamin = new XStream(new StaxDriver());
Reader someReader = new FileReader("Accounts.xml");
ObjectInputStream in = xstreamin.createObjectInputStream(someReader);
accountsin = (ArrayList<Account>) in.readObject();
in.close();
}
Конечно, это не сработает, и я не знаю почему. Я читал кое-что о неявных коллекциях, но это не очень помогло мне. Поэтому любая помощь в написании этой функции имеет большую помощь :)
Ошибки я получаю:
Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: account : account
---- Debugging information ----
message : account
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : account
class : java.util.ArrayList
required-type : java.util.ArrayList
converter-type : com.thoughtworks.xstream.converters.collections.CollectionConverter
path : /list/account
line number : 1
version : 1.4.7
-------------------------------
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:1185)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1157)
at com.thoughtworks.xstream.XStream$4.readFromStream(XStream.java:1851)
at com.thoughtworks.xstream.core.util.CustomObjectInputStream.readObjectOverride(CustomObjectInputStream.java:120)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
at Server.TokenizationWithRMI.main(TokenizationWithRMI.java:67)
Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException: account
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)
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.SecurityMapper.realClass(SecurityMapper.java:71)
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:47)
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:98)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:91)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.populateCollection(CollectionConverter.java:85)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.unmarshal(CollectionConverter.java:80)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
Какие ошибки (трассировки стека и т. Д.) Вы получаете? Какова ваша неудача? – h7r