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
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 }