Je ne connais pas très bien la configuration CXF. Ici, je rencontre une situation dans laquelle un objet (sous-classe) va être utilisé pour le client mais il ne le déclare pas dans Endpoint. Par exemple, il existe une super classe "SuperClass" et deux sous-classes "SubClassA" et "SubClassB". La méthode suivante est déclarée dans Endpoint:cxf jax-ws no complexType pour les sous-classes lors de l'utilisation de la méthode générique
public <T extends SuperClass> T search(Criteria criteria, ClassType type);
Par conséquent, ces sous-classes ne figurent pas dans Endpoint et il fait que leur complexType manque dans wsdl. L'erreur indiquant qu'aucun type de lecture est demandé lorsque l'objet de la sous-classe est appelée depuis le client.
org.apache.cxf.interceptor.Fault:
Could not determine how to read type: {http://model.fmchan.com}SubClassA
et je voudrais donc ici que de chercher une solution pour ajouter ces sous-classes dans wsdl de manière à être appelé correctement sur le côté client.
Si elle est correctement configuré, les éléments suivants doivent figurer sur wsdl:
<xsd:complexType name="SubClassA">
<xsd:sequence>
<xsd:element minOccurs="0" name="date" type="xsd:dateTime"/>
</xsd:sequence>
</xsd:complexType>
Ci-joint la configuration côté serveur pour votre référence.
<import resource="classpath:META-INF/cxf/cxf.xml" />
<bean id="aegisContext" class="org.apache.cxf.aegis.AegisContext"
p:writeXsiTypes="true" scope="prototype" />
<bean id="aegisBean" p:aegisContext-ref="aegisContext"
class="org.apache.cxf.aegis.databinding.AegisDatabinding"
scope="prototype" />
<bean id="genericServiceImpl" class="com.fmchan.service.SomeEndpointImpl"/>
<jaxws:endpoint implementor="#genericServiceImpl"
address="${service.address}">
<jaxws:serviceFactory>
<ref bean="jaxws-and-aegis-service-factory" />
</jaxws:serviceFactory>
</jaxws:endpoint>
<bean id="jaxws-and-aegis-service-factory"
class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"
scope="prototype">
<property name="dataBinding">
<bean class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
</property>
</bean>
Nous vous remercions de votre aide à l'avance.