micronode / mstor

Messaging store and archival tool
https://www.mstor.org
Other
11 stars 2 forks source link

inbox.close(false) appears to be thowing NonSerialiazable Exceptions #23

Open ghost opened 5 years ago

ghost commented 5 years ago

I'm using the basic mstor logic with version 1.0.0 of your maven mstor library, but it's throwing an Exception on, I believe, the inbox.close() method. Note: I am not doing any writing to the disk so this Exception is odd. I made, as an attempt, my class which calls your code "implement Serializable", but that did not help.

Here's the basic code:

Properties properties = new Properties(); properties.setProperty("mail.store.protocol", "mstor"); properties.setProperty("mstor.mbox.metadataStrategy", "none"); properties.setProperty("mstor.mbox.cacheBuffers", "disabled"); properties.setProperty("mstor.mbox.bufferStrategy", "mapped"); properties.setProperty("mstor.metadata", "disabled"); properties.setProperty("mstor.mozillaCompatibility", "enabled"); Session session = Session.getInstance(properties);

try { store = session.getStore(new URLName("mstor:" + pathToMboxFile));

        store.connect();
        inbox = (MStorFolder) store.getDefaultFolder();

        inbox.open(**Folder.READ_ONLY**);

        Message[] messages = inbox.getMessages();

        int bodyPartCount = 0;

        // ***********************
        // process all mbox data.
        // *************************

        for (int pos = 0; pos < messages.length; pos++)
        {

          // processing.
         }

catch (NoSuchProviderException e) { log.debug("MboxController NoSuchProviderException Exception: " + e.getMessage()); } catch (javax.mail.MessagingException e) { errors.append(e); log.debug("MboxController MessagingException Exception: " + e.getMessage()); } finally { // close the mbox store try { inbox.close(false); store.close(); } catch (MessagingException e) { log.debug("MboxController Closing Store Exception: " + e.getMessage()); } }

Now, although the code does work and returns the mbox text and closes the file, when the inbox.close(false) runs, I get this error stack (or something close to it) each time in the Tomcat log:

2019-03-31 08:06:09 - Disk Write of 191 failed: "java.io.NotSerializableException: net.fortuna.mstor.data.MessageInputStream at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:441) at net.sf.ehcache.Element.writeObject(Element.java:791) at sun.reflect.GeneratedMethodAccessor88.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97) at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:413) at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:392) at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:493) at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1151) at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1135) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)


Does your MessageInputStream class need to implement Serializeable?

Not sure what to try so I would appreciate your suggestions.

Thanks,

-- O