我使用Java EWS API(EWS - Exchange Web服务)从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
。
答案 0 :(得分:0)
您收到此异常是因为(Object)item
的类没有实现Serializable
接口。来自java doc writeObject(Object obj)
对于OutputStream和不应序列化的类的问题,会抛出异常。所有异常对OutputStream都是致命的,而OutputStream处于不确定状态,并且调用者可以忽略或恢复流状态。