A bizarre ClassCastException is thrown if I attempt to obtain a byte array field as the result of a Query:
Exception in thread "main" java.lang.ClassCastException: java.lang.Boolean cannot be cast to [B
at spiffy.test.ObjectdbTest.main(ObjectdbTest.java:44)
package spiffy.test; import java.util.List; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import javax.jdo.Query; import spiffy.test.model.Example; /** * * @author steve */ public class ObjectdbTest { /** * @param args the command line arguments */ public static void main(String[] args) { PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("test.odb"); PersistenceManager pm = pmf.getPersistenceManager(); // Clear out existing objects pm.currentTransaction().begin(); Query query = pm.newQuery(Example.class); query.deletePersistentAll(); pm.currentTransaction().commit(); pm.currentTransaction().begin(); Example example1 = new Example(); example1.setId(1); example1.setName("name1"); example1.setData(new byte[1]); example1.getData()[0] = 123; Example example2 = new Example(); example2.setId(2); example2.setName("name2"); example2.setData(new byte[2]); example2.getData()[0] = 12; pm.makePersistent(example1); pm.makePersistent(example2); pm.currentTransaction().commit(); query = pm.newQuery(Example.class, "name == :name"); query.setResult("data"); List<byte[]> dataList = (List<byte[]>) query.execute("name1"); for (byte[] data : dataList) { System.out.print(data); } } } package spiffy.test.model; /** * * @author steve */ public class Example { private long id; private String name; private byte[] data; /** * @return the id */ public long getId() { return id; } /** * @param id the id to set */ public void setId(long id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the data */ public byte[] getData() { return data; } /** * @param data the data to set */ public void setData(byte[] data) { this.data = data; } }
<?xml version="1.0"?> <jdo xmlns="http://xmlns.jcp.org/xml/ns/jdo/jdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/jdo/jdo http://xmlns.jcp.org/xml/ns/jdo/jdo_2_0.xsd" version="2.0"> <package name="spiffy.test.model"> <class name="Example"> <field name="id" primary-key="true"/> <field name="name" persistence-modifier="persistent"/> <field name="data" persistence-modifier="persistent"/> </class> </package> </jdo>