In the message that generates the fault, you send an empty <Address/> element. That's not allowed:
----- SoapRequest at 2/27/2007 2:01:13 PM ----- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <GetAdmin xmlns="urn:emp:service"> <ns1:person xmlns:ns1="urn:emp:data"> <ns1:Name>Hello World</ns1:Name> <ns1:Age>12</ns1:Age> <ns1:Address /> </ns1:person> </GetAdmin> </soapenv:Body> </soapenv:Envelope> On 3/2/07, David Elliott <[EMAIL PROTECTED]> wrote:
I am sending a concrete type: HomeAddress that is derived from Address. The place holder in the class is the abstract type. This is the Java Client code being performed. HomeAddress homeAddress = new HomeAddress(); homeAddress.setHouseNumber("123 Main Street"); Person person = new Person(); person.setAge(12); person.setName("Hello World"); person.setAddress(homeAddress); IEmployeeServiceProxy service = new IEmployeeServiceProxy(); admin = service.getAdmin(person); Dave ________________________________ > Date: Fri, 2 Mar 2007 09:11:03 -0500 > From: [EMAIL PROTECTED] > To: axis-user@ws.apache.org > Subject: Re: Issue with Axis when sending abstract class to .NET webservice > > David, > > You cannot send an element of an abstract type. Your choices: > - don't send the <Address/> element (requires minOccurs="0") > - define it as a concrete type > > Anne > > On 3/1/07, David Elliott <[EMAIL PROTECTED]> wrote: > > > > I am testing some interoperability between a Java Client using Axis and > > a .NET ASMX Webservice and am experiencing a problem and was wondering > > if anyone has an idea of what is going on. > > > > If I have a class that contains a data member that is abstract and try to > > pass a > > derived class type into the webservice, an XML error is generated. If I > > receive the > > same exact structure from the webservice all works as expected. > > > > I have a full .NET webservice and java client that will demonstrate the > > issue if > > anyone wants the code. > > > > I am including the soap messages that are received on the service. > > The class definition follows the SOAP Messages. > > > > Thanks, > > Dave > > > > WebbertSolutions[at]hotmail[dot]com > > > > > > Good Message > > - don't send address in > > - receive address > > ============================== > > > > ----- SoapRequest at 2/27/2007 2:01:41 PM ----- > > <soapenv:Envelope > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > > <soapenv:Body> > > <GetAdmin xmlns="urn:emp:service"> > > <ns1:person xmlns:ns1="urn:emp:data"> > > <ns1:Name>Hello World</ns1:Name> > > <ns1:Age>12</ns1:Age> > > </ns1:person> > > </GetAdmin> > > </soapenv:Body> > > </soapenv:Envelope> > > > > ----- SoapResponse at 2/27/2007 2:01:41 PM ----- > > <soap:Envelope > > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > > <soap:Body> > > <GetAdminResponse xmlns="urn:emp:service"> > > <GetAdminResult xsi:type="Admin" xmlns="urn:emp:data"> > > <Name>Hello World</Name> > > <Age>12</Age> > > <Address xsi:type="HomeAddress"> > > <HouseNumber>234 State Street</HouseNumber> > > </Address> > > <HasPassword>true</HasPassword> > > </GetAdminResult> > > </GetAdminResponse> > > </soap:Body> > > </soap:Envelope> > > > > > > > > > > Bad Message > > - populate HomeAddress > > - send HomeAddress in > > ============================== > > > > > > ----- SoapRequest at 2/27/2007 2:01:13 PM ----- > > <soapenv:Envelope > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > > <soapenv:Body> > > <GetAdmin xmlns="urn:emp:service"> > > <ns1:person xmlns:ns1="urn:emp:data"> > > <ns1:Name>Hello World</ns1:Name> > > <ns1:Age>12</ns1:Age> > > <ns1:Address /> > > </ns1:person> > > </GetAdmin> > > </soapenv:Body> > > </soapenv:Envelope> > > > > ----- SoapResponse at 2/27/2007 2:01:13 PM ----- > > <soap:Envelope > > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > > <soap:Body> > > <soap:Fault> > > <faultcode>soap:Client</faultcode> > > > > <faultstring>System.Web.Services.Protocols.SoapException: > > Server was unable to read request. ---> > > System.InvalidOperationException: There is an error in XML > > document (1, 353). ---> System.InvalidOperationException: > > The specified type is abstract: name='Address', namespace='urn:emp:data', at > > <Address xmlns='urn:emp:data'>. > > at > > Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read5_Address(Boolean > > isNullable, Boolean checkType) > > at > > Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read6_Person(Boolean > > isNullable, Boolean checkType) > > at > > Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read7_GetAdmin() > > at > > Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSerializationReader > > reader) > > at > > System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader > > xmlReader, String encodingStyle, XmlDeserializationEvents events) > > --- End of inner exception stack trace --- > > at > > System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader > > xmlReader, String encodingStyle, XmlDeserializationEvents events) > > at > > System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader > > xmlReader, String encodingStyle) > > at > > System.Web.Services.Protocols.SoapServerProtocol.ReadParameters() > > --- End of inner exception stack trace --- > > at > > System.Web.Services.Protocols.SoapServerProtocol.ReadParameters() > > at > > System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()</faultstring> > > <detail /> > > </soap:Fault> > > </soap:Body> > > </soap:Envelope> > > > > > > > > > > > > public abstract class PersonBase > > { > > protected PersonBase() { } > > > > private string _name; > > > > public string Name > > { > > get { return ( _name ); } > > set { _name = value; } > > } > > } > > > > > > public class Person : PersonBase > > { > > private int _age; > > private Address _address; > > > > public int Age > > { > > get { return ( _age ); } > > set { _age = value; } > > } > > > > public Address Address > > { > > get { return ( _address ); } > > set { _address = value; } > > } > > } > > > > > > public abstract class Address > > { > > protected Address() { } > > } > > > > > > public class HomeAddress : Address > > { > > public HomeAddress() { } > > > > private string _houseNumber; > > > > public string HouseNumber > > { > > get { return ( _houseNumber ); } > > set { _houseNumber = value; } > > } > > } > > > > > > ________________________________ > > Explore the seven wonders of the world Learn more! > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > ________________________________ Discover the new Windows Vista Learn more!
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]