/** * Given the input stream, this fills our service * context map. See the definition of scMap for * details. Creates a HashMap. * * Note that we don't actually unmarshal the * bytes of the service contexts here. That is * done when they are actually requested via * get(int). */ private void createMapFromInputStream(InputStream is) { orb = (ORB)(is.orb()) ; if (orb.serviceContextDebugFlag) dprint( "Constructing ServiceContexts from input stream" ) ; int numValid = is.read_long() ; if (orb.serviceContextDebugFlag) dprint("Number of service contexts = " + numValid); for (int ctr = 0; ctr < numValid; ctr++) { int scId = is.read_long(); if (orb.serviceContextDebugFlag) dprint("Reading service context id " + scId); byte[] data = OctetSeqHelper.read(is); if (orb.serviceContextDebugFlag) dprint("Service context" + scId + " length: " + data.length); scMap.put(new Integer(scId), data); } }
/** * Write the given entry from the scMap to the OutputStream. * See note on giopVersion. The service context should * know the GIOP version it is meant for. */ private void writeMapEntry(OutputStream os, Integer id, Object scObj, GIOPVersion gv) { // If it's still in byte[] form, we don't need to // unmarshal it here, just copy the bytes into // the new stream. if (scObj instanceof byte[]) { if (isDebugging(os)) dprint( "Writing service context bytes for id " + id); OctetSeqHelper.write(os, (byte[])scObj); } else { // We actually unmarshaled it into a ServiceContext // at some point. ServiceContext sc = (ServiceContext)scObj; if (isDebugging(os)) dprint( "Writing service context " + sc ) ; sc.write(os, gv); } }
/** * Return an alias typecode (an alias of the octet sequence). */ public static TypeCode type() { ORB orb = OrbRestricted.Singleton; return orb.create_alias_tc(id(), "ObjectId", OctetSeqHelper.type()); }
/** * Write the array to the input stream. */ public void write_value(OutputStream output, Serializable value) { if (output instanceof gnuValueStream) { gnuRuntime r = ((gnuValueStream) output).getRunTime(); if (r != null) r.target = null; } if (value instanceof byte[]) OctetSeqHelper.write(output, (byte[]) value); else if (value instanceof String[]) { String[] s = (String[]) value; output.write_long(s.length); for (int i = 0; i < s.length; i++) Vio.write(output, s[i], Vio.m_StringValueHelper); } else if (value instanceof int[]) LongSeqHelper.write(output, (int[]) value); else if (value instanceof long[]) LongLongSeqHelper.write(output, (long[]) value); else if (value instanceof double[]) DoubleSeqHelper.write(output, (double[]) value); else if (value instanceof float[]) FloatSeqHelper.write(output, (float[]) value); else if (value instanceof boolean[]) BooleanSeqHelper.write(output, (boolean[]) value); else if (value instanceof short[]) ShortSeqHelper.write(output, (short[]) value); else if (value instanceof char[]) CharSeqHelper.write(output, (char[]) value); else { // Write others, use reflection. component = arrayClass.getComponentType(); int n = Array.getLength(value); output.write_long(n); if (written_as_object()) for (int i = 0; i < n; i++) { Object o = Array.get(value, i); if (o == null) output.write_Object(null); else // CORBA objects have another notation. handler.writeValue(output, (Serializable) o); } else { for (int i = 0; i < n; i++) Vio.write(output, (Serializable) Array.get(value, i), component); } } }
/** * Read the Object Id as a byte array. * * @param input the stream to read from. */ public static byte[] read(InputStream input) { return OctetSeqHelper.read(input); }
/** * Write the Object Id as a byte array. * * @param output the stream to write into. * @param value the Object Id value to write. */ public static void write(OutputStream output, byte[] value) { OctetSeqHelper.write(output, value); }