我正在使用Java EWS API(EWS-Exchange Web Services)从Exchange服务器获取电子邮件,并将其存储在专有CMS中。我收到消息的类型是microsoft.exchange.webservices.data.EmailMessage-EWS API提供的类。 CMS API需要ByteArrayOutputStream对象作为其方法的参数。

所以我想将EmailMessage对象转换为ByteArrayOutputStream。我看到了this thread并尝试了类似的操作:(在item下面是EmailMessage类型)

ByteArrayOutputStream b = new ByteArrayOutputStream();
try
{
    ObjectOutputStream o  = new ObjectOutputStream(b);
    o.writeObject((Object)item);
}
catch(IOException ioe)
{
    ioe.printStackTrace();
}


但是我越来越

java.io.NotSerializableException: microsoft.exchange.webservices.data.EmailMessage
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)


我可以使用EmailMessage将这些.eml对象保存为FileOutputStream格式,但是现在无法找到将它们转换为ByteArrayOutputStream的方法。
因此,有什么方法可以将FileOutputStream转换为ByteArrayOutputStream或直接将其从EmailMessage转换为ByteArrayOutputStream

最佳答案

之所以会出现此异常,是因为您的(Object)item类未实现Serializable接口。从Java文档writeObject(Object obj)


  对于OutputStream的问题和不应序列化的类,将引发异常。所有异常对于OutputStream都是致命的,OutputStream处于不确定状态,并且取决于调用者忽略还是恢复流状态。

10-01 08:33