-
Bug
-
Resolution: Won't Fix
-
P4
-
None
-
7u55, 8
-
x86
-
windows_7
FULL PRODUCT VERSION :
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows 6.1.7601
EXTRA RELEVANT SYSTEM CONFIGURATION :
We are using maven idlj plugin to convert idl to java..
<groupId>org.codehaus.mojo</groupId>
<artifactId>idlj-maven-plugin</artifactId>
<!--<version>1.2.1</version>-->
<version>1.2.1</version>
idlj version is 3.2
A DESCRIPTION OF THE PROBLEM :
We have a union defined in an idl file
module xyz {
enum VaryingSeqTypes {doubleType, longType, stringType};
union VaryingSeqUnion switch(VaryingSeqTypes) {
case doubleType: DoubleSeq doubles;
case longType: LongSeq longs;
case stringType: StringSeq strings;
};
}
The generated code has verify* prefix methods [verifydoubles, verifystrings, verifylongs] for double, string and long types. These seem to check equality of discriminator and types by reference and not by value.
This is not working in our case.
Below is code generated:
=====================================================
/**
* VaryingSeqUnion.java .
* Generated by the IDL-to-Java compiler (portable), version "3.2"
* from C:/UserData/NewTims/tims/src/main/idl/com/ti/mtc/dedb/dedb_structs.idl
* Thursday, June 12, 2014 11:42:22 AM CDT
*/
public final class VaryingSeqUnion implements org.omg.CORBA.portable.IDLEntity
{
private double[] ___doubles;
private int[] ___longs;
private String[] ___strings;
private com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes __discriminator;
private boolean __uninitialized = true;
public VaryingSeqUnion ()
{
}
public com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
return __discriminator;
}
public double[] doubles ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
verifydoubles (__discriminator);
return ___doubles;
}
public void doubles (double[] value)
{
__discriminator = com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.doubleType;
___doubles = value;
__uninitialized = false;
}
public void doubles (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator, double[] value)
{
verifydoubles (discriminator);
__discriminator = discriminator;
___doubles = value;
__uninitialized = false;
}
private void verifydoubles (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator)
{
if (discriminator != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.doubleType)
throw new org.omg.CORBA.BAD_OPERATION ();
}
public int[] longs ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
verifylongs (__discriminator);
return ___longs;
}
public void longs (int[] value)
{
__discriminator = com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.longType;
___longs = value;
__uninitialized = false;
}
public void longs (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator, int[] value)
{
verifylongs (discriminator);
__discriminator = discriminator;
___longs = value;
__uninitialized = false;
}
private void verifylongs (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator)
{
if (discriminator!= com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.longType)
throw new org.omg.CORBA.BAD_OPERATION ();
}
public String[] strings ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
verifystrings (__discriminator);
return ___strings;
}
public void strings (String[] value)
{
__discriminator = com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType;
___strings = value;
__uninitialized = false;
}
public void strings (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator, String[] value)
{
verifystrings (discriminator);
__discriminator = discriminator;
___strings = value;
__uninitialized = false;
}
private void verifystrings (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator)
{
if (discriminator != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType)
throw new org.omg.CORBA.BAD_OPERATION ();
}
} // class VaryingSeqUnion
====================================================================
When we add below change, it seems to work in our distributed code:
if (discriminator.value() != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType.value())
throw new org.omg.CORBA.BAD_OPERATION ();
ADDITIONAL REGRESSION INFORMATION:
C:\Users\a0216021>java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode, sharing)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Add an idl file.
module xyz {
enum VaryingSeqTypes {doubleType, longType, stringType};
union VaryingSeqUnion switch(VaryingSeqTypes) {
case doubleType: DoubleSeq doubles;
case longType: LongSeq longs;
case stringType: StringSeq strings;
};
}
Using idlj generate classes.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The verify* methods should check discriminator value and not reference.
ACTUAL -
The verify* methods are check discriminator by reference.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
When we use generated code as it, it is not working across remote procedures.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
See above in Description.
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
When we add below change, it seems to work in our distributed code:
if (discriminator.value() != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType.value())
throw new org.omg.CORBA.BAD_OPERATION ();
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows 6.1.7601
EXTRA RELEVANT SYSTEM CONFIGURATION :
We are using maven idlj plugin to convert idl to java..
<groupId>org.codehaus.mojo</groupId>
<artifactId>idlj-maven-plugin</artifactId>
<!--<version>1.2.1</version>-->
<version>1.2.1</version>
idlj version is 3.2
A DESCRIPTION OF THE PROBLEM :
We have a union defined in an idl file
module xyz {
enum VaryingSeqTypes {doubleType, longType, stringType};
union VaryingSeqUnion switch(VaryingSeqTypes) {
case doubleType: DoubleSeq doubles;
case longType: LongSeq longs;
case stringType: StringSeq strings;
};
}
The generated code has verify* prefix methods [verifydoubles, verifystrings, verifylongs] for double, string and long types. These seem to check equality of discriminator and types by reference and not by value.
This is not working in our case.
Below is code generated:
=====================================================
/**
* VaryingSeqUnion.java .
* Generated by the IDL-to-Java compiler (portable), version "3.2"
* from C:/UserData/NewTims/tims/src/main/idl/com/ti/mtc/dedb/dedb_structs.idl
* Thursday, June 12, 2014 11:42:22 AM CDT
*/
public final class VaryingSeqUnion implements org.omg.CORBA.portable.IDLEntity
{
private double[] ___doubles;
private int[] ___longs;
private String[] ___strings;
private com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes __discriminator;
private boolean __uninitialized = true;
public VaryingSeqUnion ()
{
}
public com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
return __discriminator;
}
public double[] doubles ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
verifydoubles (__discriminator);
return ___doubles;
}
public void doubles (double[] value)
{
__discriminator = com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.doubleType;
___doubles = value;
__uninitialized = false;
}
public void doubles (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator, double[] value)
{
verifydoubles (discriminator);
__discriminator = discriminator;
___doubles = value;
__uninitialized = false;
}
private void verifydoubles (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator)
{
if (discriminator != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.doubleType)
throw new org.omg.CORBA.BAD_OPERATION ();
}
public int[] longs ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
verifylongs (__discriminator);
return ___longs;
}
public void longs (int[] value)
{
__discriminator = com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.longType;
___longs = value;
__uninitialized = false;
}
public void longs (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator, int[] value)
{
verifylongs (discriminator);
__discriminator = discriminator;
___longs = value;
__uninitialized = false;
}
private void verifylongs (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator)
{
if (discriminator!= com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.longType)
throw new org.omg.CORBA.BAD_OPERATION ();
}
public String[] strings ()
{
if (__uninitialized)
throw new org.omg.CORBA.BAD_OPERATION ();
verifystrings (__discriminator);
return ___strings;
}
public void strings (String[] value)
{
__discriminator = com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType;
___strings = value;
__uninitialized = false;
}
public void strings (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator, String[] value)
{
verifystrings (discriminator);
__discriminator = discriminator;
___strings = value;
__uninitialized = false;
}
private void verifystrings (com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes discriminator)
{
if (discriminator != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType)
throw new org.omg.CORBA.BAD_OPERATION ();
}
} // class VaryingSeqUnion
====================================================================
When we add below change, it seems to work in our distributed code:
if (discriminator.value() != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType.value())
throw new org.omg.CORBA.BAD_OPERATION ();
ADDITIONAL REGRESSION INFORMATION:
C:\Users\a0216021>java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode, sharing)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Add an idl file.
module xyz {
enum VaryingSeqTypes {doubleType, longType, stringType};
union VaryingSeqUnion switch(VaryingSeqTypes) {
case doubleType: DoubleSeq doubles;
case longType: LongSeq longs;
case stringType: StringSeq strings;
};
}
Using idlj generate classes.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The verify* methods should check discriminator value and not reference.
ACTUAL -
The verify* methods are check discriminator by reference.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
When we use generated code as it, it is not working across remote procedures.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
See above in Description.
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
When we add below change, it seems to work in our distributed code:
if (discriminator.value() != com.ti.mtc.dedb.DEDB_STRUCTS.VaryingSeqTypes.stringType.value())
throw new org.omg.CORBA.BAD_OPERATION ();