[ https://issues.apache.org/jira/browse/CXF-3870?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13131727#comment-13131727 ]
Benson Margulies commented on CXF-3870: --------------------------------------- If you could take the time to create a small example of the phenomenon that would be helpful; otherwise one of us will have to do that. > aegis databing SOAP response does not respect validation standard > ------------------------------------------------------------------ > > Key: CXF-3870 > URL: https://issues.apache.org/jira/browse/CXF-3870 > Project: CXF > Issue Type: Bug > Components: Aegis Databinding > Affects Versions: 2.4.3 > Environment: Debian/Tomcat/Spring/CXF/Aegis/Hibernate/PostgreSQL > Reporter: alexandre collier > > We are using aegis data binding to produce SOAP and wsdl content in front a > web server. Integration with spring works great, and the services are > consumable by both Java and PHP clients. But if I validate the SOAP response > with a tool (such as SOAP UI), an error occurs on complex type binding > involving an inheritance pattern. > Complex inheritance scheme: > {quote} > AbstractObjectA implements-> InterfaceObjectA > ObjectAImpl extends-> AbstractObjectA > AbstractObjectB implements-> InterfaceObjectB > AbstractObjectB extends-> AbstractObjectA > ObjectBImpl extends-> AbstractObjectB > {quote} > Spring and aegis configuration: > {quote} > <bean id="aegisContext" class="org.apache.cxf.aegis.AegisContext"> > <property name="writeXsiTypes" value="true" /> > <property name="enableJDOMMappings" value="true" /> > <property name="mtomEnabled" value="true" /> > <property name="beanImplementationMap"> > <map> > <entry key="my.company.domain.ObjectA" > value="AbstractObjectA"/> > <entry key="my.company.domain.ObjectB" > value="AbstractObjectB"/> > </map> > </property> > <property name="rootClassNames"> > <set> > <value>my.company.domain.ObjectAImpl</value> > <value>my.company.domain.ObjectBImpl</value> > </set> > </property> > </bean> > > <bean id="aegisBean" > class="org.apache.cxf.aegis.databinding.AegisDatabinding" scope="prototype"> > <property name="aegisContext" ref="aegisContext"/> > </bean> > > <bean id="service-factory" > class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean" > scope="prototype"> > <property name="dataBinding" ref="aegisBean" /> > <property name="serviceConfigurations"> > <list> > <bean > class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration" /> > <bean > class="org.apache.cxf.service.factory.DefaultServiceConfiguration" /> > </list> > </property> > </bean> > <jaxws:endpoint id="SoapServiceTestJaxws" implementor="#testService" > address="/serviceTestJaxws" > > <jaxws:serviceFactory> > <ref bean='service-factory' /> > </jaxws:serviceFactory> > </jaxws:endpoint> > {quote} > here is the wsdl:types part of resulting wsdl : > {quote} > <wsdl:types> > <xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified" > argetNamespace="http://domain.company.my"> > <xsd:complexType name="ObjectB"> > <xsd:sequence> > <xsd:element minOccurs="0" name="attributeA" nillable="true" > type="xsd:string"/> > <xsd:element minOccurs="0" name="attributeB" nillable="true" > type="xsd:string"/> > <xsd:element minOccurs="0" name="id" type="xsd:long"/> > </xsd:sequence> > </xsd:complexType> > <xsd:complexType name="ObjectBImpl"> > <xsd:complexContent> > <xsd:extension base="tns:AbstractObjectB"> > <xsd:sequence/> > </xsd:extension> > </xsd:complexContent> > </xsd:complexType> > <xsd:complexType abstract="true" name="AbstractObjectB"> > <xsd:complexContent> > <xsd:extension base="tns:AbstractObjectA"> > <xsd:sequence> > <xsd:element minOccurs="0" name="attributeB" nillable="true" > type="xsd:string"/> > </xsd:sequence> > </xsd:extension> > </xsd:complexContent> > </xsd:complexType> > <xsd:complexType name="ObjectAImpl"> > <xsd:complexContent> > <xsd:extension base="tns:AbstractObjectA"> > <xsd:sequence/> > </xsd:extension> > </xsd:complexContent> > </xsd:complexType> > <xsd:complexType name="ObjectA"> > <xsd:sequence> > <xsd:element minOccurs="0" name="attributeA" nillable="true" > type="xsd:string"/> > <xsd:element minOccurs="0" name="id" type="xsd:long"/> > </xsd:sequence> > </xsd:complexType> > <xsd:complexType abstract="true" name="AbstractObjectA"> > <xsd:sequence> > <xsd:element minOccurs="0" name="attributeA" nillable="true" > type="xsd:string"/> > <xsd:element minOccurs="0" name="id" type="xsd:long"/> > </xsd:sequence> > </xsd:complexType> > </xsd:schema> > </wsdl:types> > {quote} > Here is a web service declaration: > {quote} > @WebMethod > public ObjectB methodWithB(@WebParam(name = "pInputTypeB", mode = > WebParam.Mode.IN) ObjectB pInputTypeB) > {quote} > and the soap response to a call to that service: > {quote} > <soap:Envelope> > <soap:Body> > <ns1:methodWithBResponse> > <return xsi:type="ns2:ObjectBImpl"> > <ns2:attributeA>attributeAValue</ns2:attributeA> > <ns2:id>0</ns2:id> > <ns2:attributeB>attributeBValue</ns2:attributeB> > </return> > </ns1:methodWithBResponse> > </soap:Body> > </soap:Envelope> > {quote} > We can see in wsdl content that inheritance between interfaces and abstract > objects are not described. The inheritance tree isn't complete and similar to > what is coded in java. If a service return type is described with an > interface and the real content is an implementation object, validation of > soap response will fail. Java clients (cxf aegis client) seem to be smart > enough to unmarshall that kind of inheritance tree, PHP clients need to > declare a data type mapping to complete the inheritance tree, but .NET client > are blocking on validation of the soap response as they fail to match > interface and implementation types (As far as I know). > Existing tickets on XFire's jira were pointing that problem, have they been > fixed in CXF : > http://jira.codehaus.org/browse/XFIRE-556 > http://jira.codehaus.org/browse/XFIRE-558 > I've upgraded the CXF lib on my project to the last stable version (2.4.3) > but the problem remains. > If someone want to test it, I can supply a full working project (~40Mb due to > a messy lib dir). > Alex -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira