Я использую Apache CXF для моих спокойных веб-сервисов.У меня есть служба, определенная интерфейсом, который возвращает список моего компонента.
@Path("/")
@Produces("application/xml")
public interface MyService {
@GET
@Path("/test")
public List<MyBean> getBeans() throws IOException;
}
.. и реализация службы такова;
public class MyServiceImpl implements MyService {
public List<MyBean> getBeans() {
ArrayList<MyBean> beans = new ArrayList<MyBean>();
beans.add(new MyBean("foo", "bar");
return beans;
}
}
Это развернуто на моем сервереи работает нормально.Я могу запустить сервис в своем браузере и получить ожидаемый результат.Проблема заключается в том, что я пытаюсь заставить клиента CXF вызвать службу.
В моем клиентском приложении я объявляю клиента со следующей весенней конфигурацией:
<jaxrs:client id="myClient" inheritHeaders="true"
address="myhost/test"
serviceClass="com.example.MyService">
<jaxrs:headers>
<entry key="Accept" value="application/xml"/>
</jaxrs:headers>
<jaxrs:providers>
<ref bean="myJaxbXmlProvider"/>
<ref bean="myJsonProvider"/>
</jaxrs:providers>
</jaxrs:client>
<bean id="myJaxbXmlProvider" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">
<property name="jaxbElementClassMap" ref="myElementClassMap"/>
</bean>
<bean id="myJsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="jaxbElementClassMap" ref="myElementClassMap"/>
</bean>
<util:map id="myElementClassMap">
<entry key="com.example.MyBean" value="bean"/>
</util:map>
Когда клиент вызываетсяЯ получаю этот стек;1015 * ....
Причина: javax.ws.rs.WebApplicationException: java.lang.ClassCastException: com.example.MyBean нельзя преобразовать в org.apache.cxf.jaxrs.provider.AbstractJAXBProvider $ CollectionWrapper
Есть идеи?