[Simple-support] Serializing Enums
Brought to you by:
niallg
|
From: Alvin B. <alv...@gm...> - 2012-01-02 00:52:43
|
Hi
I'm trying to serialize an enum that looks like this:
public enum Category {
....
NEWSPAPER(Type.SUBSCRIPTION) {
@Override
public String getPrintable() {
return "Newspaper Subscription Fee";
}
},
MAGAZINE(Type.SUBSCRIPTION) {
@Override
public String getPrintable() {
return "Magazine Subscription Fee";
}
},
MEMBERSHIP(Type.SUBSCRIPTION) {
@Override
public String getPrintable() {
return "Club Membership Fee";
}
},
....
}
But when serializing it throws this exception:
org.simpleframework.xml.transform.TransformException: Transform of class
com.epik.dto.expense.Category$48 not supported
at
org.simpleframework.xml.transform.Transformer.write(Transformer.java:122)
at org.simpleframework.xml.core.Support.write(Support.java:200)
at
org.simpleframework.xml.core.PrimitiveFactory.getText(PrimitiveFactory.java:128)
at org.simpleframework.xml.core.Primitive.write(Primitive.java:288)
at org.simpleframework.xml.core.Composite.writeElement(Composite.java:1331)
at org.simpleframework.xml.core.Composite.writeElement(Composite.java:1314)
at org.simpleframework.xml.core.Composite.writeUnion(Composite.java:1194)
at org.simpleframework.xml.core.Composite.writeElements(Composite.java:1165)
at org.simpleframework.xml.core.Composite.writeSection(Composite.java:1071)
at org.simpleframework.xml.core.Composite.write(Composite.java:1042)
at org.simpleframework.xml.core.Composite.write(Composite.java:1019)
at org.simpleframework.xml.core.Traverser.write(Traverser.java:236)
at org.simpleframework.xml.core.Traverser.write(Traverser.java:208)
at org.simpleframework.xml.core.Traverser.write(Traverser.java:186)
at org.simpleframework.xml.core.Persister.write(Persister.java:1187)
at org.simpleframework.xml.core.Persister.write(Persister.java:1169)
at org.simpleframework.xml.core.Persister.write(Persister.java:1147)
at org.simpleframework.xml.core.Persister.write(Persister.java:1266)
at com.epik.client.AbstractClient.postResource(AbstractClient.java:171)
at com.epik.client.BillClient.addBill(BillClient.java:33)
at com.epik.client.BillClient.<init>(BillClient.java:23)
at com.epik.client.BillClient.main(BillClient.java:74)
The top class of the exception (AbstractClient), and the line that
generates the exception is this:
Serializer s = new Persister(new EpikMatcher());
StringWriter writer = new StringWriter();
s.write(resource, writer); //Exception generated Here
The matcher looks like this:
public class EpikMatcher implements Matcher {
@SuppressWarnings("rawtypes")
@Override
public Transform match(Class clazz) throws Exception {
if (clazz.equals(DateTime.class)) {
return new DateTimeAdapter();
}
return null;
}
}
It serializes when the enum doesn't implement an abstract method (as does
mine), but as I implement an abstract method, it crashes.
Thanks for any help
|