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: cxf-user@incubator.apache.org
> 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.

Reply via email to