Класс Enum является Serializable, поэтому нет проблем с сериализацией объекта с перечислениями. В другом случае класс имеет поля java.util.Optional class. В этом случае бросается следующее исключение: java.io.NotSerializableException: java.util.Optional
Как бороться с такими классами, как их сериализовать? Можно ли отправлять такие объекты в Remote EJB или через RMI?
Это пример:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Optional;
import org.junit.Test;
public class SerializationTest {
    static class My implements Serializable {
        private static final long serialVersionUID = 1L;
        Optional<Integer> value = Optional.empty();
        public void setValue(Integer i) {
            this.i = Optional.of(i);
        }
        public Optional<Integer> getValue() {
            return value;
        }
    }
    //java.io.NotSerializableException is thrown
    @Test
    public void serialize() {
        My my = new My();
        byte[] bytes = toBytes(my);
    }
    public static <T extends Serializable> byte[] toBytes(T reportInfo) {
        try (ByteArrayOutputStream bstream = new ByteArrayOutputStream()) {
            try (ObjectOutputStream ostream = new ObjectOutputStream(bstream)) {
                ostream.writeObject(reportInfo);
            }
            return bstream.toByteArray();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}