[
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