Hi,
I managed to configure the simple frontend to produce a WSDL with
inheritance using AEGIS, but I can't make the client to work with the
inheritance, it throws a ClassCastException when trying to cast to the
childClass.
Here is my spring configuration:
<bean id="aegisBean"
class="org.apache.cxf.aegis.databinding.AegisDatabinding" scope="prototype"
/>
<bean id="simple-and-aegis-service-factory"
class="org.apache.cxf.service.factory.ReflectionServiceFactoryBean"
scope="prototype">
<property name="dataBinding" ref="aegisBean" />
<property name="serviceConfigurations">
<list>
<bean
class="org.apache.cxf.service.factory.DefaultServiceConfiguration"
/>
<bean
class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration"
/>
</list>
</property>
<property name="properties">
<map>
<entry key="writeXsiType">
<value
type="java.lang.Boolean">true</value>
</entry>
<entry key="overrideTypesList">
<list>
<value>testapplication.model.DummySon</value>
<value>testapplication.model.DummyGrandSon</value>
</list>
</entry>
</map>
</property>
</bean>
<simple:server id="getDummyWS" serviceClass="testapplication.ws.GetDummyWS"
address="/GetDummy"
serviceBean="#getDummyWSImp">
<simple:serviceFactory>
<ref bean="simple-and-aegis-service-factory" />
</simple:serviceFactory>
</simple:server>
And the GetDummyWSImp Cass:
public class GetDummyWSImp implements GetDummyWS{
public Dummy doService(String name){
DummySon ds = new DummySon();
ds.setBirth(new Date(2001,10,14));
ds.setCode(new Long(45));
ds.setName(name);
ds.setSonField("sondField");
return ds;
}
}
And the Dummy, DummySon and DummyGrandSon classes:
public class Dummy {
private String name;
private Long code;
private Date birth;
(plus getter and setters)
}
public class DummySon extends Dummy {
private String sonField;
(plus getter and setters)
}
public class DummyGrandSon extends DummySon {
private String grandSonField;
(plus getter and setters)
}
And finally the WSDL:
<?xml version="1.0" encoding="utf-8"?><wsdl:definitions
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://ws.testapplication/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="GetDummyWS"
targetNamespace="http://ws.testapplication/">
<wsdl:types>
<xsd:schema xmlns:tns="http://model.testapplication"
attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://model.testapplication">
<xsd:complexType name="DummyGrandSon">
<xsd:complexContent>
<xsd:extension base="tns:DummySon">
<xsd:sequence>
<xsd:element minOccurs="0" name="grandSonField"
nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="DummySon">
<xsd:complexContent>
<xsd:extension base="tns:Dummy">
<xsd:sequence>
<xsd:element minOccurs="0" name="sonField"
nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Dummy">
<xsd:sequence>
<xsd:element minOccurs="0" name="birth" type="xsd:dateTime"/>
<xsd:element minOccurs="0" name="code" nillable="true"
type="xsd:long"/>
<xsd:element minOccurs="0" name="name" nillable="true"
type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<xsd:schema xmlns:ns0="http://model.testapplication"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://ws.testapplication/">
<xsd:element name="doService" type="tns:doService"/>
<xsd:complexType name="doService">
<xsd:sequence>
<xsd:element minOccurs="0" name="arg0" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="doServiceResponse" type="tns:doServiceResponse"/>
<xsd:complexType name="doServiceResponse">
<xsd:sequence>
<xsd:element minOccurs="0" name="return" type="ns0:Dummy"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="doService">
<wsdl:part element="tns:doService" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="doServiceResponse">
<wsdl:part element="tns:doServiceResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="GetDummyWSPortType">
<wsdl:operation name="doService">
<wsdl:input message="tns:doService" name="doService">
</wsdl:input>
<wsdl:output message="tns:doServiceResponse" name="doServiceResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="GetDummyWSSoapBinding" type="tns:GetDummyWSPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="doService">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="doService">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="doServiceResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="GetDummyWS">
<wsdl:port binding="tns:GetDummyWSSoapBinding" name="GetDummyWSPort">
<soap:address location="http://localhost:8080/services/GetDummy"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
InJeNiErO.
>I pessimistically think that you've found a bug. Could you please drop
>this into JIRA?
> -----Original Message-----
> From: Segal, Jeffrey [mailto:[EMAIL PROTECTED]
> Sent: Thursday, November 01, 2007 4:31 PM
> To: [email protected]
> Subject: Migrating XFire/Aegis inheritance to CXF
>
> I'd like to bump the question posed a few weeks ago by Nalyd (see
> http://www.nabble.com/Aegis-inheritance-tf4668138.html#a13335122).
>
> I am attempting to ensure that some additional classes which are not
> present in my service interfaces get bound along with the others, a
> common problem given a service such as:
>
> public void queue(Job job);
>
> where there exists the following classes:
>
> public class BigJob extends Job { ... }
> public class SmallJob extends Job {...}
>
> In this case, Job will be bound to XML elements, but BigJob and
SmallJob
> will not. XFire does support this, documented at
> http://xfire.codehaus.org/Aegis+Inheritance. However, I cannot find a
> similar piece of documentation on porting this solution to CXF. It
> seems as if the support is all still there but not necessarily exposed
> (see http://cwiki.apache.org/CXF20DOC/aegis-theory-of-operation.html).
>
> I have played around with a few things in my Spring configuration,
such
> as adding something like this to my ServiceFactoryBean:
>
> <bean id='jaxws-and-aegis-service-factory'
> class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
> ...
> <property name="properties">
> <map>
> <entry key="writeXsiType">
> <value type="java.lang.Boolean">true</value>
> </entry>
> <entry key="overrideTypesList">
> <list>
> <value>com.foo.bar.BigJob</value>
> <value>com.foo.bar.SmallJob</value>
> </list>
> </entry>
> </map>
> </property>
> ...
> </bean>
>
> This deploys without error, but my WSDL and corresponding stubs do not
> include the overridden types. Any ideas?
>
> Thanks!
> Jeff
--
View this message in context:
http://www.nabble.com/Migrating-XFire-Aegis-inheritance-to-CXF-tp13536859p15412041.html
Sent from the cxf-user mailing list archive at Nabble.com.