in yoko-core/src/main/java/org/apache/yoko/orb/CORBA/Any.java [98:292]
private void readValue(org.omg.CORBA.portable.InputStream in) {
int kind = origType_.kind().value();
logger.fine("Reading ANY value of kind " + kind);
//
// Spec says that calling read_value when a Streamable has
// previously been inserted will update the Streamable
//
if (value_ instanceof org.omg.CORBA.portable.Streamable
&& kind != org.omg.CORBA.TCKind._tk_value
&& kind != org.omg.CORBA.TCKind._tk_value_box
&& kind != org.omg.CORBA.TCKind._tk_abstract_interface) {
((org.omg.CORBA.portable.Streamable) value_)._read(in);
return;
}
switch (kind) {
case org.omg.CORBA.TCKind._tk_null:
case org.omg.CORBA.TCKind._tk_void:
value_ = null;
break;
case org.omg.CORBA.TCKind._tk_short:
value_ = new Integer(in.read_short());
break;
case org.omg.CORBA.TCKind._tk_long:
value_ = new Integer(in.read_long());
break;
case org.omg.CORBA.TCKind._tk_longlong:
value_ = new Long(in.read_longlong());
break;
case org.omg.CORBA.TCKind._tk_ushort:
value_ = new Integer(in.read_ushort());
break;
case org.omg.CORBA.TCKind._tk_ulong:
value_ = new Integer(in.read_ulong());
break;
case org.omg.CORBA.TCKind._tk_ulonglong:
value_ = new Long(in.read_ulonglong());
break;
case org.omg.CORBA.TCKind._tk_float:
value_ = new Float(in.read_float());
break;
case org.omg.CORBA.TCKind._tk_double:
value_ = new Double(in.read_double());
break;
case org.omg.CORBA.TCKind._tk_boolean:
value_ = Boolean.valueOf(in.read_boolean());
break;
case org.omg.CORBA.TCKind._tk_char:
value_ = new Character(in.read_char());
break;
case org.omg.CORBA.TCKind._tk_wchar:
value_ = new Character(in.read_wchar());
break;
case org.omg.CORBA.TCKind._tk_octet:
value_ = new Byte(in.read_octet());
break;
case org.omg.CORBA.TCKind._tk_any:
value_ = in.read_any();
break;
case org.omg.CORBA.TCKind._tk_TypeCode:
value_ = in.read_TypeCode();
break;
case org.omg.CORBA.TCKind._tk_Principal:
value_ = in.read_Principal();
break;
case org.omg.CORBA.TCKind._tk_objref:
value_ = in.read_Object();
break;
case org.omg.CORBA.TCKind._tk_struct:
case org.omg.CORBA.TCKind._tk_except:
case org.omg.CORBA.TCKind._tk_union:
case org.omg.CORBA.TCKind._tk_sequence:
case org.omg.CORBA.TCKind._tk_array: {
org.apache.yoko.orb.OCI.Buffer buf = new org.apache.yoko.orb.OCI.Buffer();
OutputStream out = new OutputStream(buf);
out._OB_ORBInstance(orbInstance_);
out.write_InputStream(in, origType_);
InputStream is = (InputStream) out.create_input_stream();
// This is not necessary
// in._OB_ORBInstance(orbInstance_);
value_ = is;
break;
}
case org.omg.CORBA.TCKind._tk_value:
case org.omg.CORBA.TCKind._tk_value_box:
case org.omg.CORBA.TCKind._tk_abstract_interface: {
try {
InputStream is = (InputStream) in;
// this is a useful tracepoint, but produces a lot of data, so turn on only
// if really needed.
// if (logger.isLoggable(Level.FINEST)) {
// logger.finest("Reading value from \n\n" + is.dumpData());
// }
is.read_value(this, type_);
} catch (ClassCastException ex) {
try {
org.omg.CORBA_2_3.portable.InputStream is = (org.omg.CORBA_2_3.portable.InputStream) in;
value_ = is.read_value(type_.id());
} catch (org.omg.CORBA.TypeCodePackage.BadKind e) {
org.apache.yoko.orb.OB.Assert._OB_assert(e);
}
}
break;
}
case org.omg.CORBA.TCKind._tk_enum:
value_ = new Integer(in.read_ulong());
break;
case org.omg.CORBA.TCKind._tk_string: {
try {
String str = in.read_string();
int len = origType_.length();
if (len != 0 && str.length() > len)
throw new org.omg.CORBA.MARSHAL("string length ("
+ str.length() + ") exceeds " + "bound (" + len
+ ")",
org.apache.yoko.orb.OB.MinorCodes.MinorReadStringOverflow,
CompletionStatus.COMPLETED_NO);
value_ = str;
} catch (org.omg.CORBA.TypeCodePackage.BadKind ex) {
org.apache.yoko.orb.OB.Assert._OB_assert(ex);
}
break;
}
case org.omg.CORBA.TCKind._tk_wstring: {
try {
String str = in.read_wstring();
int len = origType_.length();
if (len != 0 && str.length() > len)
throw new org.omg.CORBA.MARSHAL("wstring length ("
+ str.length() + ") exceeds " + "bound (" + len
+ ")",
org.apache.yoko.orb.OB.MinorCodes.MinorReadWStringOverflow,
CompletionStatus.COMPLETED_NO);
value_ = str;
} catch (org.omg.CORBA.TypeCodePackage.BadKind ex) {
org.apache.yoko.orb.OB.Assert._OB_assert(ex);
}
break;
}
case org.omg.CORBA.TCKind._tk_fixed: {
try {
value_ = in.read_fixed().movePointLeft(origType_.fixed_scale());
} catch (org.omg.CORBA.TypeCodePackage.BadKind ex) {
org.apache.yoko.orb.OB.Assert._OB_assert(ex);
}
break;
}
case org.omg.CORBA.TCKind._tk_native:
throw new org.omg.CORBA.MARSHAL(
org.apache.yoko.orb.OB.MinorCodes
.describeMarshal(org.apache.yoko.orb.OB.MinorCodes.MinorNativeNotSupported),
org.apache.yoko.orb.OB.MinorCodes.MinorNativeNotSupported,
CompletionStatus.COMPLETED_NO);
case org.omg.CORBA_2_4.TCKind._tk_local_interface:
throw new org.omg.CORBA.MARSHAL(
org.apache.yoko.orb.OB.MinorCodes
.describeMarshal(org.apache.yoko.orb.OB.MinorCodes.MinorLocalObject),
org.apache.yoko.orb.OB.MinorCodes.MinorLocalObject,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
case org.omg.CORBA.TCKind._tk_alias:
default:
throw new org.omg.CORBA.DATA_CONVERSION(
org.apache.yoko.orb.OB.MinorCodes
.describeDataConversion(org.apache.yoko.orb.OB.MinorCodes.MinorNoAlias),
org.apache.yoko.orb.OB.MinorCodes.MinorNoAlias,
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
}
}