Soap cxf jax ws在使用泛型方法时没有子类的complexType

Soap cxf jax ws在使用泛型方法时没有子类的complexType,soap,wsdl,cxf,jax-ws-customization,Soap,Wsdl,Cxf,Jax Ws Customization,我不太熟悉CXF配置。在这里,我遇到了一种情况,一个对象(子类)将用于客户端,但它没有在端点中声明 例如,有一个超类“SuperClass”和两个子类“Subassa”和“Subassb”。在Endpoint中声明了以下方法: public <T extends SuperClass> T search(Criteria criteria, ClassType type); 所以在这里,我想寻找一种解决方案,将这些子类添加到wsdl中,以便在客户端正确调用 如果正确配置,则应在ws

我不太熟悉CXF配置。在这里,我遇到了一种情况,一个对象(子类)将用于客户端,但它没有在端点中声明

例如,有一个超类“SuperClass”和两个子类“Subassa”和“Subassb”。在Endpoint中声明了以下方法:

public <T extends SuperClass> T search(Criteria criteria, ClassType type);
所以在这里,我想寻找一种解决方案,将这些子类添加到wsdl中,以便在客户端正确调用

如果正确配置,则应在wsdl上显示以下内容:

<xsd:complexType name="SubClassA">
    <xsd:sequence>
        <xsd:element minOccurs="0" name="date" type="xsd:dateTime"/>
    </xsd:sequence>
</xsd:complexType>

随函附上服务器端的配置,供您参考

<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>


提前感谢您的帮助。

我想到的最简单的解决方案是创建一个虚拟方法,其中包括作为端点参数的子类a和B。这可能不是最好的解决办法,我仍然在寻找更好的办法

<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>