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
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE

Reply via email to