View Javadoc

1   package org.xvsm.remote.marshaller;
2   
3   import java.io.ByteArrayInputStream;
4   import java.io.ByteArrayOutputStream;
5   import java.io.IOException;
6   import java.io.ObjectInputStream;
7   import java.io.ObjectOutputStream;
8   
9   import org.apache.log4j.Logger;
10  import org.xvsm.internal.exceptions.FatalException;
11  import org.xvsm.internal.tasks.Task;
12  import org.xvsm.remote.interfaces.IMarshaller;
13  
14  /***
15   * @author Christian Schreiber, Michael Proestler
16   * 
17   */
18  public class JavaMarshaller implements IMarshaller<byte[]> {
19  	private static Logger logger = Logger.getLogger(JavaMarshaller.class);
20  	
21  	/***
22  	 * {@inheritDoc}
23  	 */
24  	public byte[] marshall(Task y) {		
25  		if(logger.isDebugEnabled()){
26  			logger.debug("marshall(" + y + ")");
27  		}
28  		try {
29  			ByteArrayOutputStream bos = new ByteArrayOutputStream();
30  			ObjectOutputStream oos = new ObjectOutputStream(bos);
31  			oos.writeObject(y);
32  			oos.flush();
33  			oos.close();
34  			bos.close();
35  			byte[] data = bos.toByteArray();
36  
37  			return data;
38  		} catch (IOException e) {
39  			throw new FatalException(e);
40  		}
41  	}
42  
43  	/***
44  	 * {@inheritDoc}
45  	 */
46  	public Task unmarshall(byte[] bytes) {
47  		try {
48  			if (bytes.length == 0) {
49  				// FIXME throw exception
50  			}
51  			ObjectInputStream in;
52  
53  			in = new ObjectInputStream(new ByteArrayInputStream(bytes));
54  
55  			Object o = in.readObject();
56  			Task t = (Task) o;
57  
58  			if(logger.isDebugEnabled()){
59  				logger.debug("Unmarshalled: " + t);
60  			}
61  			
62  			return t;
63  		} catch (IOException e) {
64  			throw new FatalException(e);
65  		} catch (ClassNotFoundException e) {
66  			throw new FatalException(e);
67  		}
68  	}
69  }