summaryrefslogtreecommitdiff
path: root/gnu/CORBA/gnuAny.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/CORBA/gnuAny.java')
-rw-r--r--gnu/CORBA/gnuAny.java20
1 files changed, 16 insertions, 4 deletions
diff --git a/gnu/CORBA/gnuAny.java b/gnu/CORBA/gnuAny.java
index 7997265df..a48c50d61 100644
--- a/gnu/CORBA/gnuAny.java
+++ b/gnu/CORBA/gnuAny.java
@@ -15,8 +15,8 @@ General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
@@ -68,6 +68,8 @@ import org.omg.CORBA.portable.Streamable;
import java.io.IOException;
import java.io.Serializable;
+import java.lang.reflect.Field;
+
import java.math.BigDecimal;
import java.util.Arrays;
@@ -279,9 +281,19 @@ public class gnuAny
{
try
{
- return ((ValueBaseHolder) has).value;
+ if (has instanceof ValueBaseHolder)
+ return ((ValueBaseHolder) has).value;
+ else
+ {
+ // Normally, ValueBase holder must be an instance of the
+ // ValueBaseHolder. However some IDL compilers probably
+ // have a bug, do not deriving this way. The the only
+ // way to access the wrapped value is via reflection.
+ Field f = has.getClass().getField("value");
+ return (Serializable) f.get(has);
+ }
}
- catch (ClassCastException ex)
+ catch (Exception ex)
{
return new BAD_OPERATION("Value type expected");
}