Either you have completely lost me, or we are thinking of different things.

Constructors for the objects work, and casting them up for serialisation works. Deserialisation also works, but casting them down to the implemented class does not...

-justin


robert lazarski wrote:
Sorry to leave you hanging Justin, been busy and this question required a bit of thinking.

You can do inheritance and abstract classes via xml binding. See this jira for how it works:

http://issues.apache.org/jira/browse/AXIS2-310 - this got fixed in axis 1.3 and I found a work around for axis2.

So you'll get this signature in axis 1.3 using the referenced wsdl:

public class ReturnWeb_Login extends com.callcentreweb.types.ReturnWeb_Base implements java.io.Serializable

The abstract class your looking for. In axis2, here we use xmlbeans (same basic wsdl only with different names, and this time using doc / lit ) .

public interface SmartLoginResponse extends swasmartns.types.ReturnWebBase

I wasn't able to get extends to work using adb.

Does this help?
Robert
http://www.braziloutsource.com/




On 2/23/06, *Justin Schoeman* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Hi again,

    I am begging now - I have tried everything that I can think of.  This is
    my last effort before scrapping Linux/Apache/Axis for this project and
    switching to Widoze/C# :-(

    The problem is:

    I need to implement a webservice for XMLVend (generated by a standards
    body) that uses abstract types for just about everything.  The abstract
    types contain no methods/properties of their own - they are just there
    to allow for various data types to be plugged in as required.

    As an example, one abstract type is DeviceID (abstract) for which we use
    the GenericDeviceID implementation. On the client, this looks like:

    EANDeviceID id = EANDeviceID.Factory.newInstance();
    id.setEAN("hello");
    req.setClientID(id);

    All works fine up till now. Call out the client, and get this bit of xml
    over the wire:
    <clientID.xmlns=" http://www.nrs.eskom.co.za/xmlvend/base/2.0/schema";
    xmlns:sch="http://www.nrs.eskom.co.za/xmlvend/base/2.0/schema";
    ean="1234567890123" type="sch:EANDeviceID" />

    As you can see, all is fine (except that type= should be xsi:type=, but
    client and server are Axis2, so not an issue here).

    On the server, I retrieve the ClientID with:

    DeviceID = req.getClientID();
    System.out.println(id.getClass().getName());

    This outputs:
    'za.co.eskom.nrs.www.xmlvend.base._2_0.schema.impl.DeviceIDImpl'

    NOW: HOW DO I GET FROM THE DeviceIDImpl TYPE BACK TO THE EANDeviceID?
    Casting does not work, and I can think of nothing else.

    As a simple test, I plugged the id back into the response:

    resp.setClientID(id);

    and look at the response on the wire:

    <clientID xmlns=" http://www.nrs.eskom.co.za/xmlvend/base/2.0/schema";
    xmlns:sch="http://www.nrs.eskom.co.za/xmlvend/base/2.0/schema";
    ean="1234567890123" type="sch:EANDeviceID" />

    So 'id' does definitely have the type and value information, but I
    cannot figure out how to get it out programatically!

    If anybody can give me some advice before I go totally insane, I would
    greatly appreciate it ;-)

    Thanks,

    -justin

    PS - There is nothing quite as frustrating as KNOWING that the data is
    right there, and KNOWING there must be a simple way of getting at it,
    but not being able to do it...


Reply via email to