我正在使用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处于不确定状态,并且取决于调用者忽略还是恢复流状态。