[jboss-jira] [JBoss JIRA] Resolved: (JBRULES-1925) ClassCastException problem with reading working memory using ObjectInputStream
Mark Proctor (JIRA)
jira-events at lists.jboss.org
Mon May 16 22:00:01 EDT 2011
[ https://issues.jboss.org/browse/JBRULES-1925?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mark Proctor resolved JBRULES-1925.
-----------------------------------
Resolution: Done
No one has come back to say if these are still issues in 5.x. Closing for now. Re-open with test case for 5.x if it still fails.
> ClassCastException problem with reading working memory using ObjectInputStream
> ------------------------------------------------------------------------------
>
> Key: JBRULES-1925
> URL: https://issues.jboss.org/browse/JBRULES-1925
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Affects Versions: 4.0.7
> Environment: JDK 1.5.0_11
> Reporter: Przemyslaw Rozycki
> Assignee: Mark Proctor
> Labels: classcastexception, rete, session, stateful, statefulsession, workingmemory
> Fix For: 5.2.0.M1
>
> Attachments: DroolsTest5.java
>
>
> I experienced the problem while reading WorkingMemory using ObjectInputStream.
> Here is the code:
> public class DroolsTest5 {
> public static void main(String[] args) {
> Properties props = new Properties();
> props.setProperty("file", "<<place a path to any working DRL here>>");
>
> RuleAgent ruleAgent = RuleAgent.newRuleAgent(props);
>
> Fact fact1 = new Fact("a","b");
>
> RuleBase ruleBase = ruleAgent.getRuleBase();
> WorkingMemory baseWm = ruleBase.newStatefulSession(false);
> baseWm.insert(fact1);
>
> Iterator iter1 = baseWm.iterateObjects();
> while (iter1.hasNext()) {
> System.out.println(iter1.next());
> }
> System.out.println("=====");
>
> try {
> ByteArrayOutputStream baos = new ByteArrayOutputStream();
> ObjectOutputStream oos = new ObjectOutputStream(baos);
> oos.writeObject(baseWm);
> oos.close();
> byte[] buf = baos.toByteArray();
> ByteArrayInputStream bais = new ByteArrayInputStream(buf);
>
> ObjectInputStream ois = new ObjectInputStream(bais);
> WorkingMemory wm = (WorkingMemory) ois.readObject();
> Iterator iter2 = wm.iterateObjects();
> while (iter2.hasNext()) {
> System.out.println(iter2.next());
> }
> System.out.println("=====");
> } catch (Exception e) {
> e.printStackTrace();
> }
> }
> public static class Fact implements Serializable {
> String name;
>
> String id;
> public Fact(String _name, String _id) {
> name = _name;
> id = _id;
> }
> public String getId() {
> return id;
> }
> public String getName() {
> return name;
> }
>
> @Override
> public String toString() {
> return "Name: " + name + ", Id: " + id;
> }
> }
> }
> And here is an exception I get:
> java.lang.ClassCastException: java.io.ObjectInputStream
> at org.drools.reteoo.Rete$ClassObjectTypeConf.readObject(Rete.java:605)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
> at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
> at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
> at org.drools.util.AbstractHashTable.readExternal(AbstractHashTable.java:66)
> at org.drools.util.ObjectHashMap.readExternal(ObjectHashMap.java:41)
> at java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1755)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1717)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
> at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
> at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
> at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
> at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
> at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
> at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
> at com.sample.DroolsTest5.main(DroolsTest5.java:52)
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list