That was the first thing I tried. The first thing I ran into was that using
"int" for elem1's type caused a MappingException to get thrown: "Could not
find the class int". Not sure what's going there. So I changed that to
integer, and it worked slightly better.

But, I think tougher to work around, is the next problem:

java.lang.IllegalStateException: Field access error: elem2(java.lang.String)
access resulted in exception: java.lang.reflect.InvocationTargetException

Though the error message doesn't say it, I think it has to do with the
generated IDL throwing a BAD_OPERATION exception when, for example, elem2()
is called when the union is set to ELEM1.

I was hoping for some way to say in the mapping file, "don't write an
element if this condition isn't true" but wasn't able to figure one out. So
I wrote a FieldHandler that returns the appropiate union field from
getValue.

-----Original Message-----
From: Keith Visco [mailto:[EMAIL PROTECTED]]
Sent: Friday, December 06, 2002 2:27 PM
To: [EMAIL PROTECTED]
Subject: Re: [castor-dev] marshalling objects from classes generated
from IDL unions



Just use a mapping file:

<?xml version="1.0"?>
<mapping>
   <class name="TestUnion">
      <map-to xml="testUnion"/>
      <field name="elem1" type="int" set-method="elem1"
get-method="elem1"/>
      <field name="elem2" type="string" set-method="elem2"
get-method="elem2"/>
   </class>
</mapping>

--Keith

"Doyle, Joe" wrote:
> 
> I'm looking for advice about writing a mapping file to go from classes
> generated from IDL unions to XML. This is my second day of looking at
> Castor, and am ready to go down the FieldHandler road, but would like to
> avoid it if someone has done this before.
> 
> Based on this IDL,
> 
> enum TestUnionType {
>     ELEM1,
>     ELEM2
> };
> 
> union TestUnion switch (TestUnionType) {
>     case ELEM1: long elem1;
>     case ELEM2: string elem2;
> };
> 
> I'd like to generate XML that looks like either
> <testUnion>
>    <elem1>10000</elem1>
> </testUnion>
> 
> or
> 
> <testUnion>
>    <elem2>test</elem2>
> </testUnion>
> 
> based on which TestUnionType is specified.
> 
> Here's the Java mapping for the IDL:
> 
> /**  *  Generated from IDL definition of union "TestUnion"
>      *  @author JacORB IDL compiler
> */
>  public final class TestUnion
>         implements org.omg.CORBA.portable.IDLEntity
> {
>         private TestUnionType discriminator;
>         private java.lang.String elem2;
>         private int elem1;
>         public TestUnion ()
>         {       }
>         public TestUnionType discriminator ()
>         {               return discriminator;   }
> 
>         public java.lang.String elem2 ()
>         {
>                 if( discriminator != TestUnionType.ELEM2)
>                         throw new org.omg.CORBA.BAD_OPERATION();
>                 return elem2;
>         }
> 
>         public void elem2 (java.lang.String _x)
>         {
>                 discriminator = TestUnionType.ELEM2;
>                 elem2 = _x;
>         }
> 
>         public int elem1 ()
>         {
>                 if( discriminator != TestUnionType.ELEM1)
>                         throw new org.omg.CORBA.BAD_OPERATION();
>                 return elem1;
>         }
> 
>         public void elem1 (int _x)
>         {
>                 discriminator = TestUnionType.ELEM1;
>                 elem1 = _x;
>         }
>  }
> 
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
>         unsubscribe castor-dev

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to