Для проекта я читаю богатый текст из файла excel (.xlsx), который должен быть сохранен в файле mongoDB для последующего копирования в другой файл excel. Сейчас я пытаюсь сохранить его, как это:Сохранение XSSFRichTextString в (mongo) DB с помощью Apache POI
public static BasicDBObject createDBGlobalIssue(GlobalIssue g) {
BasicDBObject o = new BasicDBObject();
XSSFRichTextString richText = g.getRichValue();
byte[] value;
try {
value = transform(richText);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
o.put("test", value);
}
return o;
}
public static byte[] transform(XSSFRichTextString yourObject) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(yourObject);
byte[] yourBytes = bos.toByteArray();
return yourBytes;
} finally {
// lots of try-catch
}
}
и пытается преобразовать его обратно, как это:
public static GlobalIssue createGlobalIssue(BasicDBObject o) {
byte[] stream = (byte[])o.get("test");
XSSFRichTextString record;
try {
record = (XSSFRichTextString)unPack(stream);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e.getMessage(), e);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
GlobalIssue g = new GlobalIssue(richStringsByAttribute);
return g;
}
public static XSSFRichTextString unPack(byte[] input) throws ClassNotFoundException, IOException {
ByteArrayInputStream bis = new ByteArrayInputStream(input);
ObjectInput in = null;
try {
in = new ObjectInputStream(bis);
Object o = in.readObject();
return (XSSFRichTextString)o;
} finally {
try {
bis.close();
} catch (IOException ex) {
// ignore close exception
}
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
// ignore close exception
}
}
}
, к сожалению, это приводит к ошибке, потому что XSSFRichTextString не сериализации: Вызванный по: java.io.NotSerializableException: org.apache.poi.xssf.usermodel.XSSFRichTextString
Я знаю, что для HSSF есть класс-оболочка, сериализует (TextObjectRecord), но все мои попытки написать подобный класс для XSSF иметь не смогли. Я бы предпочел не переключать всю свою программу обратно на HSSF, потому что она устарела и болит во многих других местах.
Кто-нибудь знает, как я мог бы решить эту проблему? благодаря!