use of org.jacorb.orb.giop.ServiceContextTransportingOutputStream in project ACS by ACS-Community.
the class CorbaNullFinderTest method testJacorbNullBehavior.
/**
* Tests jacorb's reaction to null data inside structs.
* If this test fails after a jacorb update, the logic of the Null Finder must be revisited.
*/
public void testJacorbNullBehavior() throws Exception {
// Below we'll need an ORB...
AcsLogger logger = ClientLogManager.getAcsLogManager().getLoggerForApplication("testOrbLogger", false);
AcsCorba acsCorba = new AcsCorba(logger);
acsCorba.initCorbaForClient(false);
// Jacorb uses ReplyOutputStream, but its base class ServiceContextTransportingOutputStream is easier to construct
// and should be similar enough for this test.
OutputStream out = new ServiceContextTransportingOutputStream(acsCorba.getORB());
Struct2 myStruct2 = ComponentWithBadNullsImpl.createGoodStruct2();
// the good data should marshal without exception
Struct2Helper.write(out, myStruct2);
// null string
try {
myStruct2.mystruct1.mystring = null;
Struct2Helper.write(out, myStruct2);
fail("null strings in structs should marshal with exception.");
} catch (MARSHAL ex) {
// expected
assertEquals("org.omg.CORBA.MARSHAL: Cannot marshall null string.", ex.toString());
}
// null enum
myStruct2 = ComponentWithBadNullsImpl.createGoodStruct2();
try {
myStruct2.mystruct1.myenum1 = null;
Struct2Helper.write(out, myStruct2);
fail("null strings in structs should marshal with NPE.");
} catch (NullPointerException ex) {
// expected... this is a really mean case, because we get NPE instead of MARSHAL. Maybe a jacorb bug?
}
// null struct
myStruct2 = ComponentWithBadNullsImpl.createGoodStruct2();
try {
myStruct2.mystruct1 = null;
Struct2Helper.write(out, myStruct2);
fail("null structs inside structs should marshal with NPE.");
} catch (NullPointerException ex) {
// expected... this is a really mean case, because we get NPE instead of MARSHAL. Maybe a jacorb bug?
}
// top-level struct itself is null
try {
Struct2Helper.write(out, null);
fail("top-level null structs should marshal with NPE.");
} catch (NullPointerException ex) {
// expected...
}
// null sequence of structs
myStruct2 = ComponentWithBadNullsImpl.createGoodStruct2();
try {
myStruct2.seqOfStruct1 = null;
Struct2Helper.write(out, myStruct2);
fail("null sequence of structs inside structs should marshal with NPE.");
} catch (NullPointerException ex) {
// expected... this is a really mean case, because we get NPE instead of MARSHAL. Maybe a jacorb bug?
}
// sequence with null struct
myStruct2 = ComponentWithBadNullsImpl.createGoodStruct2();
try {
// with null inside
myStruct2.seqOfStruct1 = new Struct1[1];
Struct2Helper.write(out, myStruct2);
fail("sequence of structs with nulls should marshal with NPE.");
} catch (NullPointerException ex) {
// expected... this is a really mean case, because we get NPE instead of MARSHAL. Maybe a jacorb bug?
}
}
Aggregations