Hi everyone,

I'm developing a patch against the ADB C code generator to allow it to
handle polymorphism correctly. Let me illustrate my point.

Say you have a complexType A, which is abstract. Then there are
complexTypes A1 and A2, which extend A and are not abstract.

Now, polymorphism can exist in two forms, from the client's perspective:
  - A parameter in a SOAP method can be of abstract type A; this means
that you can provide the method with either an A1 or A2 object (not A,
because it's abstract).
  - A return value for a SOAP method can be of abstract type A; this
means that the server will either return an A1 or an A2 (once again,
not A, because it's abstract).

The first case is relatively easy to handle, and I've already
implemented the solution for it. All that is required is for each
structure to have a pointer to its own serialization method, so that
even if you cast it to A the right serialization will be performed.

The second case, however, is quite problematic. The only way to know
which type is being returned is, of course, during runtime, by looking
at the xsi:type property. This is relatively easy to do with Axiom,
but the problem is how to invoke the right create method, but the
problem is that for this to work correctly, it's necessary to invoke
the "create" and "deserialize" methods for the right subtype (the ones
for A won't do, as they aren't aware of the specific properties of A1
and A2). I thought of creating one global hash table with the
create/deserialize methods for all types when generating the stub for
the service, but it doesn't strike me as a particularly elegant
solution. Does anyone have any other suggestions?

It's at times like these I wish C had classes and I could just let the
language handle the issue itself ;-)

Cheers,
Sérgio

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to