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]> 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