ActionDescriptor extends AbstractDescriptor, and as the name suggests AbstractDescriptor is an abstract class.
When the method service.getAllActionDescriptors() is invoked the following exception is thrown:
org.xml.sax.SAXException: Unable to create JavaBean of type com.wrycan.AbstractDescriptor. Missing default constructor? Error was: java.lang.InstantiationException.
at org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.java:124)
at org.apache.axis.encoding.DeserializerImpl.onStartElement(DeserializerImpl.java:451)
at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:395)
.....
I'm using the wsdl2java tool to generate the client source. The generated AbstractDesctriptor class is abstract so when the deserializer is called,
(copied from axis1.2-beta-3 source)
public BeanDeserializer(Class javaType, QName xmlType, TypeDesc typeDesc, Map propertyMap ) {
this.xmlType = xmlType;
this.javaType = javaType;
this.typeDesc = typeDesc;
this.propertyMap = propertyMap;
// create a value
try {
value=javaType.newInstance(); // <------- Exception thrown decause the generated class is abstract
} catch (Exception e) {
// Don't process the exception at this point.
// This is defered until the call to startElement
// which will throw the exception.
}
}
Is this a bug or am I missing a setting when generating the client source from the wsdl? any help would be appreciated!
Thanks.
My settings ------------------------- axis version: 1.2-beta-3 message type: RPC/encd
*using the java2wsdl and wsdl2java to generate the server-config.wsdd and client source. The type mapping version is set to 1.2
generated type mappings:
...
<typeMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" serializer="org.apache.axis.encoding.ser.ArraySerializerFactory" deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory" type="java:com.wrycan.ActionDescriptor[]" qname="ns23:ArrayOf_tns5_ActionDescriptor" xmlns:ns23="urn:SoapService"/>
<typeMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" type="java:com.wrycan.AbstractDescriptor" qname="ns26:AbstractDescriptor" xmlns:ns26="http://wrycan.com"/>
<typeMapping encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" type="java:com.wrycan.ActionDescriptor" qname="ns32:ActionDescriptor" xmlns:ns32="http://wrycan.com"/>
...
generated wsdl:
...
<complexType abstract="true" name="AbstractDescriptor">
<sequence>
<element name="id" type="xsd:int"/>
<element name="parent" nillable="true" type="tns6:AbstractDescriptor"/>
</sequence>
</complexType>
...
<complexType name="ActionDescriptor">
<complexContent>
<extension base="tns6:AbstractDescriptor">
<sequence>
.... elements ...
</sequence>
</extension>
</complexContent>
</complexType>
-- Kyle Cronin Consultant at Wrycan, Inc.
[EMAIL PROTECTED] http://www.wrycan.com