You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2008/06/02 14:40:15 UTC

svn commit: r662415 - in /incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba: impl/reference/ types/ types/util/

Author: antelder
Date: Mon Jun  2 05:40:15 2008
New Revision: 662415

URL: http://svn.apache.org/viewvc?rev=662415&view=rev
Log:
TUSCANY-2357: some files left out from previous commit (r662395)

Added:
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/NodeType.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTree.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeCreator.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeNode.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ArrayTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/BooleanTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ByteTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/CharTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/DoubleTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/FloatTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/IntTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/LongTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ReferenceTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/SequenceTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ShortTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StringTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StructTypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelper.java
    incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelpersProxy.java

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,77 @@
+package org.apache.tuscany.sca.binding.corba.impl.reference;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTree;
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeCreator;
+import org.apache.tuscany.sca.binding.corba.types.util.TypeHelpersProxy;
+import org.omg.CORBA.Object;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.ObjectImpl;
+import org.omg.CORBA.portable.OutputStream;
+
+/**
+ * Represents single CORBA request
+ */
+public class DynaCorbaRequest {
+
+	private TypeTree returnTree;
+	private List<TypeTree> arguments = new ArrayList<TypeTree>();
+	private OutputStream outputStream;
+	private ObjectImpl remoteObject;
+
+	/**
+	 * Creates request.
+	 * 
+	 * @param remoteObject
+	 *            remote object reference
+	 * @param operation
+	 *            operation to invoke
+	 */
+	public DynaCorbaRequest(Object remoteObject, String operation) {
+		outputStream = ((ObjectImpl) remoteObject)._request(operation, true);
+		this.remoteObject = (ObjectImpl) remoteObject;
+
+	}
+
+	/**
+	 * Adds operation argument
+	 * 
+	 * @param argument
+	 */
+	public void addArgument(java.lang.Object argument) {
+		TypeTree tree = TypeTreeCreator.createTypeTree(argument.getClass());
+		TypeHelpersProxy.write(tree.getRootNode(), outputStream, argument);
+	}
+
+	/**
+	 * Sets return type for operation
+	 * 
+	 * @param forClass
+	 */
+	public void setOutputType(Class<?> forClass) {
+		returnTree = TypeTreeCreator.createTypeTree(forClass);
+	}
+
+	/**
+	 * Invokes previously configured request
+	 * 
+	 * @return
+	 */
+	public DynaCorbaResponse invoke() {
+		DynaCorbaResponse response = new DynaCorbaResponse();
+		try {
+			InputStream is = remoteObject._invoke(outputStream);
+			if (is != null) {
+				response.setContent(TypeHelpersProxy.read(returnTree
+						.getRootNode(), is));
+			}
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return response;
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaResponse.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,19 @@
+package org.apache.tuscany.sca.binding.corba.impl.reference;
+
+/**
+ * Holder for content returned from DynaCorbaRequest
+ *
+ */
+public class DynaCorbaResponse {
+
+	private Object content;
+
+	public Object getContent() {
+		return content;
+	}
+
+	public void setContent(Object content) {
+		this.content = content;
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/NodeType.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/NodeType.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/NodeType.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/NodeType.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,8 @@
+package org.apache.tuscany.sca.binding.corba.types;
+
+/**
+ * Types of CORBA objects.
+ */
+public enum NodeType {
+	primitive, struct, union, array, sequence, reference
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTree.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTree.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTree.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTree.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,56 @@
+package org.apache.tuscany.sca.binding.corba.types;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Helper tree for Java object hierarchy. It's closer to CORBA types structure
+ * than plain Java hierarchy - it helps reading and writing complex structures.
+ */
+public class TypeTree {
+
+	private Map<Class<?>, TypeTreeNode> typesUsed = new HashMap<Class<?>, TypeTreeNode>();
+	private TypeTreeNode rootNode;
+
+	/**
+	 * Intent was to cache previously computed type trees. In practice it caused
+	 * a bug, and it's not being used right now. TODO: enable type trees caching
+	 * 
+	 * @param forClass
+	 * @param node
+	 */
+	public void addUsedType(Class<?> forClass, TypeTreeNode node) {
+		typesUsed.put(forClass, node);
+	}
+
+	/**
+	 * Returns node for previously created tree, it's getter for nodes added by
+	 * addUsedType method. Not in use right now. TODO: enable type trees caching
+	 * 
+	 * @param forClass
+	 * @return
+	 */
+	public TypeTreeNode getNodeForType(Class<?> forClass) {
+		return typesUsed.get(forClass);
+	}
+
+	/**
+	 * Returns root node.
+	 * 
+	 * @return root of type tree
+	 */
+	public TypeTreeNode getRootNode() {
+		return rootNode;
+	}
+
+	/**
+	 * Sets root of the type tree.
+	 * 
+	 * @param rootNode
+	 *            root node.
+	 */
+	public void setRootNode(TypeTreeNode rootNode) {
+		this.rootNode = rootNode;
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeCreator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeCreator.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeCreator.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeCreator.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,200 @@
+package org.apache.tuscany.sca.binding.corba.types;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Creator of types tree.
+ * 
+ */
+public class TypeTreeCreator {
+
+	/**
+	 * Helps to determine if type is a primitive.
+	 */
+	private static List<Class<?>> primitives = new ArrayList<Class<?>>();
+
+	static {
+		primitives.add(boolean.class);
+		primitives.add(byte.class);
+		primitives.add(short.class);
+		primitives.add(int.class);
+		primitives.add(long.class);
+		primitives.add(double.class);
+		primitives.add(float.class);
+		primitives.add(char.class);
+		primitives.add(String.class);
+		primitives.add(Boolean.class);
+		primitives.add(Byte.class);
+		primitives.add(Short.class);
+		primitives.add(Integer.class);
+		primitives.add(Long.class);
+		primitives.add(Double.class);
+		primitives.add(Float.class);
+		primitives.add(Character.class);
+	}
+
+	/**
+	 * Creates class for given string argument.
+	 * 
+	 * @param name
+	 *            name of type
+	 * @return type
+	 */
+	private static Class<?> createClassFromString(String name) {
+		Class<?> result = null;
+		try {
+			if (name.length() == 1) {
+				// primitives
+				switch (name.charAt(0)) {
+				case 'Z':
+					result = boolean.class;
+					break;
+				case 'C':
+					result = char.class;
+					break;
+				case 'B':
+					result = byte.class;
+					break;
+				case 'S':
+					result = short.class;
+					break;
+				case 'I':
+					result = int.class;
+					break;
+				case 'J':
+					result = long.class;
+					break;
+				case 'F':
+					result = float.class;
+					break;
+				case 'D':
+					result = double.class;
+					break;
+				}
+			} else {
+				// class
+				name = name.substring(1, name.length() - 1);
+				result = Class.forName(name);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
+
+	/**
+	 * Reduces dimension of array.
+	 * 
+	 * @param forClass
+	 *            array class
+	 * @return reduced array
+	 */
+	private static Class<?> reduceArrayDimension(Class<?> forClass) {
+		String name = forClass.getName();
+		try {
+			String reduced = name.substring(1, name.length());
+			if (reduced.startsWith("[")) {
+				// reduced class is still an array
+				return Class.forName(reduced);
+			} else {
+				// reduced class may be primitive or class
+				return createClassFromString(reduced);
+			}
+		} catch (ClassNotFoundException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * Creates tree for given type.
+	 * 
+	 * @param forClass
+	 * @return type tree
+	 */
+	public static TypeTree createTypeTree(Class<?> forClass) {
+		TypeTree tree = new TypeTree();
+		TypeTreeNode rootNode = null;
+		rootNode = inspectClassHierarchy(forClass, tree);
+		tree.setRootNode(rootNode);
+		return tree;
+
+	}
+
+	/**
+	 * Recurrent method which builds type tree.
+	 * 
+	 * @param forClass
+	 * @param tree
+	 * @return
+	 */
+	private static TypeTreeNode inspectClassHierarchy(Class<?> forClass,
+			TypeTree tree) {
+		// //remains of type tree caching
+		// TypeTreeNode existingNode = tree.getNodeForType(forClass);
+		// if (existingNode != null) {
+		// return existingNode;
+		// }
+
+		TypeTreeNode node = createTypeNode(forClass);
+		NodeType nodeType = node.getNodeType();
+		TypeTreeNode[] children = null;
+
+		// //remains of type tree caching
+		// tree.addUsedType(forClass, node);
+
+		if (nodeType.equals(NodeType.primitive)) {
+			// stop condition for recurrent method
+		} else if (nodeType.equals(NodeType.array)) {
+			// similar to sequence, but with fixed array length
+			// TODO: determine how array length will be declared
+		} else if (nodeType.equals(NodeType.sequence)) {
+			// reducing sequence dimension
+			Class<?> reduced = reduceArrayDimension(node.getJavaClass());
+			children = new TypeTreeNode[1];
+			children[0] = inspectClassHierarchy(reduced, tree);
+		} else if (nodeType.equals(NodeType.struct)) {
+			// inspect types for every structure member
+			Field[] fields = node.getJavaClass().getFields();
+			children = new TypeTreeNode[fields.length];
+			for (int i = 0; i < fields.length; i++) {
+				Class<?> field = fields[i].getType();
+				TypeTreeNode child = inspectClassHierarchy(field, tree);
+				child.setName(fields[i].getName());
+				children[i] = child;
+			}
+		} else if (nodeType.equals(NodeType.union)) {
+			// TODO: unions
+		} else if (nodeType.equals(NodeType.reference)) {
+			// TODO: CORBA references
+		}
+
+		node.setChildren(children);
+		return node;
+	}
+
+	/**
+	 * Creating and configuring TypeTreeNode for given class.
+	 * 
+	 * @param forClass
+	 *            class
+	 * @return node
+	 */
+	private static TypeTreeNode createTypeNode(Class<?> forClass) {
+		TypeTreeNode node = new TypeTreeNode();
+		if (forClass.isArray()) {
+			node.setNodeType(NodeType.sequence);
+			node.setJavaClass(forClass);
+		} else if (primitives.contains(forClass)) {
+			node.setNodeType(NodeType.primitive);
+			node.setJavaClass(forClass);
+			node.setChildren(null);
+		} else {
+			node.setNodeType(NodeType.struct);
+			node.setJavaClass(forClass);
+		}
+		return node;
+	}
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeNode.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeNode.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeNode.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/TypeTreeNode.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,46 @@
+package org.apache.tuscany.sca.binding.corba.types;
+
+/**
+ * Represents single tree node.
+ * 
+ */
+public class TypeTreeNode {
+
+	private NodeType nodeType;
+	private TypeTreeNode[] children;
+	private Class<?> javaClass;
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public NodeType getNodeType() {
+		return nodeType;
+	}
+
+	public void setNodeType(NodeType nodeType) {
+		this.nodeType = nodeType;
+	}
+
+	public TypeTreeNode[] getChildren() {
+		return children;
+	}
+
+	public void setChildren(TypeTreeNode[] children) {
+		this.children = children;
+	}
+
+	public Class<?> getJavaClass() {
+		return javaClass;
+	}
+
+	public void setJavaClass(Class<?> javaClass) {
+		this.javaClass = javaClass;
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ArrayTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ArrayTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ArrayTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ArrayTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,25 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class ArrayTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		// TODO Auto-generated method stub
+
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/BooleanTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/BooleanTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/BooleanTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/BooleanTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,23 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class BooleanTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(8));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_boolean();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_boolean((Boolean) data);
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ByteTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ByteTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ByteTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ByteTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,23 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class ByteTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(10));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_octet();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_octet((Byte) data);
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/CharTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/CharTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/CharTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/CharTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,23 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class CharTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(9));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_char();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_char((Character) data);
+	}
+	
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/DoubleTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/DoubleTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/DoubleTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/DoubleTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,23 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class DoubleTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(7));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_double();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_double((Double) data);
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/FloatTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/FloatTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/FloatTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/FloatTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,23 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class FloatTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(6));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_float();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_float((Float) data);
+	}
+	
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/IntTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/IntTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/IntTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/IntTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,23 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class IntTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(3));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_long();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_long((Integer) data);
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/LongTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/LongTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/LongTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/LongTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,24 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class LongTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(23));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_longlong();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_longlong((Long) data);
+	}
+	
+	
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ReferenceTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ReferenceTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ReferenceTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ReferenceTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,24 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.Object;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class ReferenceTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_Object();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, java.lang.Object data) {
+		os.write_Object((Object) data);
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/SequenceTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/SequenceTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/SequenceTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/SequenceTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,61 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class SequenceTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		TypeCode typeCode = 
+			org.omg.CORBA.ORB.init().create_alias_tc(
+				node.getJavaClass().getSimpleName(),
+				node.getJavaClass().getSimpleName(),
+				org.omg.CORBA.ORB.init().create_sequence_tc(0,
+						TypeHelpersProxy.getType(node.getChildren()[0])));
+		return typeCode;
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		Object sequence = null;
+		try {
+			int size = is.read_long();
+			sequence = Array.newInstance(node.getChildren()[0].getJavaClass(),
+					size);
+			for (int i = 0; i < size; i++) {
+				Array.set(sequence, i, TypeHelpersProxy.read(
+						node.getChildren()[0], is));
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return sequence;
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		int sum = 0;
+		// determine length of array
+		List<Object> array = new ArrayList<Object>();
+		while (true) {
+			try {
+				array.add(Array.get(data, sum));
+				sum++;
+			} catch (ArrayIndexOutOfBoundsException e) {
+				break;
+			}
+		}
+		os.write_long(sum);
+		Iterator<Object> iter = array.iterator();
+		while (iter.hasNext()) {
+			Object elem = iter.next();
+			TypeHelpersProxy.write(node.getChildren()[0], os, elem);
+		}
+
+	}
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ShortTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ShortTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ShortTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/ShortTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,24 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class ShortTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().get_primitive_tc(org.omg.CORBA.TCKind.from_int(2));
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_short();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_short((Short) data);
+	}
+
+	
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StringTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StringTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StringTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StringTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,24 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class StringTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		return ORB.init().create_string_tc(0);
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		return is.read_string();
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		os.write_string((String) data);
+	}
+
+	
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StructTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StructTypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StructTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/StructTypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,68 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import java.lang.reflect.Field;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.StructMember;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public class StructTypeHelper implements TypeHelper {
+
+	public TypeCode getType(TypeTreeNode node) {
+		TypeTreeNode[] children = node.getChildren();
+		if (children != null) {
+			StructMember[] members = new StructMember[children.length];
+			for (int i = 0; i < children.length; i++) {
+				members[i] = new StructMember(children[i].getJavaClass()
+						.getSimpleName(),
+						TypeHelpersProxy.getType(children[i]), null);
+			}
+			TypeCode result = org.omg.CORBA.ORB.init().create_struct_tc(
+					node.getJavaClass().getSimpleName(),
+					node.getJavaClass().getSimpleName(), members);
+			return result;
+		} else {
+			return null;
+		}
+	}
+
+	public Object read(TypeTreeNode node, InputStream is) {
+		TypeTreeNode[] children = node.getChildren();
+		Object result = null;
+		if (children != null) {
+			try {
+				result = node.getJavaClass().newInstance();
+				for (int i = 0; i < children.length; i++) {
+					Object childResult = TypeHelpersProxy.read(children[i], is);
+					Field childField = result.getClass().getField(
+							children[i].getName());
+					childField.set(result, childResult);
+				}
+			} catch (Exception e) {
+				// TODO: handle exception
+				e.printStackTrace();
+			}
+		}
+		return result;
+	}
+
+	public void write(TypeTreeNode node, OutputStream os, Object data) {
+		TypeTreeNode[] children = node.getChildren();
+		if (children != null) {
+			try {
+				for (int i = 0; i < children.length; i++) {
+					Field childField = node.getJavaClass().getField(
+							children[i].getName());
+					TypeHelpersProxy.write(children[i], os, childField
+							.get(data));
+				}
+			} catch (Exception e) {
+				// TODO: handle exception
+				e.printStackTrace();
+			}
+		}
+	}
+
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelper.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelper.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,33 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+public interface TypeHelper {
+	
+	/**
+	 * Gets type definition for CORBA API.
+	 * @param node 
+	 * @return
+	 */
+	TypeCode getType(TypeTreeNode node);
+	
+	/**
+	 * Reads CORBA object
+	 * @param node
+	 * @param is
+	 * @return
+	 */
+	Object read(TypeTreeNode node, InputStream is);
+	
+	/**
+	 * Writes CORBA object
+	 * @param node
+	 * @param os
+	 * @param data
+	 */
+	void write(TypeTreeNode node, OutputStream os, Object data);
+	
+}

Added: incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelpersProxy.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelpersProxy.java?rev=662415&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelpersProxy.java (added)
+++ incubator/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/types/util/TypeHelpersProxy.java Mon Jun  2 05:40:15 2008
@@ -0,0 +1,113 @@
+package org.apache.tuscany.sca.binding.corba.types.util;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.binding.corba.types.NodeType;
+import org.apache.tuscany.sca.binding.corba.types.TypeTreeNode;
+import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.portable.InputStream;
+import org.omg.CORBA.portable.OutputStream;
+
+/**
+ * Proxies getType(), write(), read() methods to appropriate TypeHelper implementation.
+ * 
+ */
+public class TypeHelpersProxy {
+
+	/**
+	 * Maps primitive types to its TypeHelper implementations
+	 */
+	private static Map<Class<?>, TypeHelper> primitiveTypes = null;
+
+	/**
+	 * Maps other types to its TypeHelper implementations
+	 */
+	private static Map<NodeType, TypeHelper> complexTypes = null;
+
+	static {
+		// initiate type helpers
+		primitiveTypes = new HashMap<Class<?>, TypeHelper>();
+		complexTypes = new HashMap<NodeType, TypeHelper>();
+
+		primitiveTypes.put(boolean.class, new BooleanTypeHelper());
+		primitiveTypes.put(char.class, new CharTypeHelper());
+		primitiveTypes.put(byte.class, new ByteTypeHelper());
+		primitiveTypes.put(short.class, new ShortTypeHelper());
+		primitiveTypes.put(int.class, new IntTypeHelper());
+		primitiveTypes.put(long.class, new LongTypeHelper());
+		primitiveTypes.put(float.class, new FloatTypeHelper());
+		primitiveTypes.put(double.class, new DoubleTypeHelper());
+		primitiveTypes.put(String.class, new StringTypeHelper());
+		primitiveTypes.put(Boolean.class, primitiveTypes.get(boolean.class));
+		primitiveTypes.put(Character.class, primitiveTypes.get(char.class));
+		primitiveTypes.put(Byte.class, primitiveTypes.get(byte.class));
+		primitiveTypes.put(Short.class, primitiveTypes.get(short.class));
+		primitiveTypes.put(Integer.class, primitiveTypes.get(int.class));
+		primitiveTypes.put(Long.class, primitiveTypes.get(long.class));
+		primitiveTypes.put(Float.class, primitiveTypes.get(float.class));
+		primitiveTypes.put(Double.class, primitiveTypes.get(double.class));
+		primitiveTypes.put(String.class, primitiveTypes.get(String.class));
+		complexTypes.put(NodeType.array, new ArrayTypeHelper());
+		complexTypes.put(NodeType.struct, new StructTypeHelper());
+		complexTypes.put(NodeType.reference, new ReferenceTypeHelper());
+		complexTypes.put(NodeType.sequence, new SequenceTypeHelper());
+	}
+
+	/**
+	 * Gets type helper basing on given type
+	 * 
+	 * @param node
+	 * @return
+	 */
+	private static TypeHelper getTypeHelper(TypeTreeNode node) {
+		TypeHelper typeHelper = null;
+		NodeType type = node.getNodeType();
+		if (type.equals(NodeType.primitive)) {
+			typeHelper = primitiveTypes.get(node.getJavaClass());
+		} else {
+			typeHelper = complexTypes.get(type);
+		}
+		return typeHelper;
+	}
+
+	/**
+	 * Proxies getType method invocation to appropriate TypeHelper
+	 * implementation. It's not being used since I've changed method for passing
+	 * arguments. May be useful while implementing CORBA service bindings.
+	 * 
+	 * @param node
+	 * @return
+	 */
+	public static final TypeCode getType(TypeTreeNode node) {
+		TypeHelper typeHelper = getTypeHelper(node);
+		TypeCode typeCode = typeHelper.getType(node);
+		return typeCode;
+	}
+
+	/**
+	 * Proxies read method invocation to appropriate TypeHelper implementation.
+	 * 
+	 * @param node
+	 * @param is
+	 * @return
+	 */
+	public static final Object read(TypeTreeNode node, InputStream is) {
+		TypeHelper helper = getTypeHelper(node);
+		return helper.read(node, is);
+	}
+
+	/**
+	 * Proxies write method invocation to appropriate TypeHelper implementation.
+	 * 
+	 * @param node
+	 * @param os
+	 * @param data
+	 */
+	public static final void write(TypeTreeNode node, OutputStream os,
+			Object data) {
+		TypeHelper helper = getTypeHelper(node);
+		helper.write(node, os, data);
+	}
+
+}