У меня есть аннотированный класс Simple XML, который я хочу использовать для сериализации/десериализации. У меня есть массив byte[], который я использую с пользовательским конвертером, но он не работает при методе чтения.
Вот мой аннотированный объект Simple XML
@Root
public class Device implements Serializable
{
@Element
@Convert(ByteArrayConverter.class)
protected byte[] imageRef;
...
}
Вот мой преобразователь
import org.simpleframework.xml.convert.Converter;
import org.simpleframework.xml.stream.InputNode;
import org.simpleframework.xml.stream.OutputNode;
public class ByteArrayConverter implements Converter<byte[]>
{
@Override
public byte[] read(InputNode node) throws Exception
{
String value = node.getValue();
//return value.getBytes();
return new byte[]{1,2,3,4,5};
}
@Override
public void write(OutputNode node, byte[] byteArray) throws Exception
{
node.setValue("something");
}
}
Вот мой XML с именем device.xml
<device>
<imageRef>AQIDBAU=</imageRef>
</device>
Вот мой код сериализации, который терпит неудачу
Strategy strategy = new AnnotationStrategy();
Serializer serializer = new Persister(strategy);
File file = new File("device.xml");
Device device = serializer.read(Device.class, file);
Я поставил точку останова в методе ByteArrayConverter.read() и сказал, что он выполняется правильно и возвращает массив байтов. Однако после этого где-то в Simple XML я получаю это
Исключение в потоке «основной» org.simpleframework.xml.core.InstantiationException: несовместимый класс [B для поля «imageRef», защищенный байт [] com.test.Device.imageRef в строке 4 в org.simpleframework.xml.core.Factory. getOverride(Factory.java:147) в org.simpleframework.xml.core.PrimitiveFactory.getInstance(PrimitiveFactory.java:82) в org.simpleframework.xml.core.Primitive.readElement(Primitive.java:186) в org.simpleframework .xml.core.Primitive.read(Primitive.java:124) в org.simpleframework.xml.core.Composite.readVariable(Composite.java:623) в org.simpleframework.xml.core.Composite.readInstance(Composite.java :573) в org.simpleframework.xml.core.Composite.readUnion(Composite.java:549) в org.simpleframework.xml.core.Composite.readElement(Composite.java:532) в org.simpleframework.xml.core. Composite.readElements(Composite.java:445) на org.simpleframework.xml.core.Composite.access$400(Composite.java:59) на org.simplefra mework.xml.core.Composite$Builder.read(Composite.java:1383) в org.simpleframework.xml.core.Composite.read(Composite.java:201) в org.simpleframework.xml.core.Composite.read( Composite.java:148) в org.simpleframework.xml.core.Traverser.read(Traverser.java:92) в org.simpleframework.xml.core.Persister.read(Persister.java:625) в org.simpleframework.xml .core.Persister.read(Persister.java:606) в org.simpleframework.xml.core.Persister.read(Persister.java:584) в org.simpleframework.xml.core.Persister.read(Persister.java:543 ) в org.simpleframework.xml.core.Persister.read(Persister.java:521) в org.simpleframework.xml.core.Persister.read(Persister.java:426)
Любые указатели будут полезны.