package org.zkoss.bug; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.logging.Level; import java.util.logging.Logger; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.metainfo.ComponentInfo; import org.zkoss.zk.ui.select.SelectorComposer; public class Serialization1 extends SelectorComposer { private static final long serialVersionUID = 1L; final static Logger log = Logger.getLogger(Serialization1.class.getName()); @Override public ComponentInfo doBeforeCompose(Page page, Component parent, ComponentInfo compInfo) { try { // Write the object out to a byte array ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject(compInfo); out.flush(); out.close(); // Make an input stream from the byte array and read // a copy of the object back in. byte[] data = bos.toByteArray(); log.info("serialized data length: "+data.length); ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(data)); ComponentInfo restored = (ComponentInfo)in.readObject(); } catch(Exception e) { log.log(Level.SEVERE, "Exception during seralizing object "+compInfo+": "+e.getMessage(), e); throw new RuntimeException("Error seralizing object: "+e.getMessage(), e); } return super.doBeforeCompose(page, parent, compInfo); } }