/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2015 */ package com.ibm.streamsx.topology.internal.spljava; import java.io.IOException; import java.io.ObjectInputStream; import com.ibm.streams.operator.StreamSchema; import com.ibm.streams.operator.Tuple; import com.ibm.streams.operator.types.Blob; /** * Mapping for a Java object as an SPL schema. * Like Java at runtime (the schema) we have no knowledge of * the actual type of the Java object, the info for * generic parameter of TStream<T> is not needed. */ class SPLJavaObject extends SPLMapping<Object> { /** * Attribute name for a schema with a serialized java object */ public static final String SPL_JAVA_OBJECT = "__spl_jo"; SPLJavaObject(StreamSchema schema) { super(schema); } @Override public Object convertFrom(Tuple tuple) { Blob blob = tuple.getBlob(0); if (blob instanceof JavaObjectBlob) { JavaObjectBlob jblob = (JavaObjectBlob) blob; return jblob.getObject(); } try (ObjectInputStream ois = new ObjectInputStream(blob.getInputStream())) { return ois.readObject(); } catch (IOException e) { throw new RuntimeException(e); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } @Override public Tuple convertTo(Object tuple) { JavaObjectBlob jblob = new JavaObjectBlob(tuple); return getSchema().getTuple(new Blob[] { jblob }); } }