Недавно я обновился до Java 7, и я замечаю странную проблему с сериализацией XML. В принципе, у меня есть класс утилиты тестирования, который преобразует объект в XML с помощью кодировщика XML.Java IOException на XMLEncoder flush
См пример кода ниже:
public static String toXML(Object obj) {
String retval = null;
if(obj != null) {
XMLEncoder encoder = null;
ByteArrayOutputStream bos;
try {
bos = new ByteArrayOutputStream();
encoder = new XMLEncoder(bos);
encoder.writeObject(obj);
encoder.close();
byte[] bytes = bos.toByteArray();
if(bytes != null) {
retval = new String(bytes);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(encoder != null) {
encoder.close();
}
}
}
return retval;
}
который работал хорошо с Java 1.6, однако с тех пор я повышен до Java 1.7 Я заметил операции XML энкодер приводит к созданию IOException в журналах:
java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:45)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:140)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at java.beans.XMLEncoder.flush(XMLEncoder.java:497)
at java.beans.XMLEncoder.close(XMLEncoder.java:530)
at com.mytestcode.server.common.util.TestSerializer.toXML(TestSerializer.java:87)
Я заглянул в код XMLEncoder и обнаружил, что StreamEncoder.ensureOpen имеет чек для isOpen, который, кажется, подходит как ложный.
This вопрос выглядит аналогичным, хотя он не использует кодировщик Java 1.7 Java. Я не видел эту проблему с кодировщиком XML или с помощью этого метода в целом, есть ли что-то, что я могу исправить в коде, или это кажется более нисходящим? Что мне не хватает?