/** * Test that jacorb handles some self-constructed broken typecodes well. The constructed typecode * is in principal recursive, but not flagged as such. */ public void testBrokenRecursiveTypecode() { Any innerAny = orb.create_any(); innerAny.insert_long(4711); StructMember[] members = {new StructMember("myAny", innerAny.type(), null)}; TypeCode innerTc = orb.create_struct_tc( "IDL:Anonymous:1.0", // repository ID "Anonymous", // Struct name members); TypeCode outerTc = orb.create_struct_tc( "IDL:Anonymous:1.0", // repository ID "Anonymous", // Struct name new StructMember[] {new StructMember("foo", innerTc, null)}); org.jacorb.orb.CDROutputStream out = new org.jacorb.orb.CDROutputStream(orb); out.write_TypeCode(outerTc); org.jacorb.orb.CDRInputStream in = new org.jacorb.orb.CDRInputStream(orb, out.getBufferCopy()); out = new org.jacorb.orb.CDROutputStream(orb); // need to write out typecode, to check it's consistency completely out.write_TypeCode(in.read_TypeCode()); }
protected TypeCode doReadTypeCodeInternal( CDRInputStream in, Map recursiveTCMap, Map repeatedTCMap, Integer startPosition, int kind, String repositoryID) { final String name = validateName(in.read_string()); final int member_count = in.read_long(); StructMember[] members = new StructMember[member_count]; for (int i = 0; i < member_count; i++) { members[i] = new StructMember(in.read_string(), in.read_TypeCode(recursiveTCMap, repeatedTCMap), null); } return orb.create_exception_tc(repositoryID, name, members, false); }