【发布时间】:2011-05-13 14:57:23
【问题描述】:
我将 Apache CXF 用于我的宁静 Web 服务。我有一个由返回我的 bean 列表的接口定义的服务。
@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 客户端调用服务时。
在我的客户端应用程序中,我使用以下 spring 配置声明了一个客户端;
<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>
当客户端被调用时,我得到了这个堆栈跟踪;
org.apache.cxf.jaxrs.client.ClientWebApplicationException: . 阅读回复的问题 消息,类:接口 java.util.List,内容类型: 应用程序/xml。
....
造成的: javax.ws.rs.WebApplicationException: java.lang.ClassCastException: com.example.MyBean 不能转换为 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider$CollectionWrapper
有什么想法吗?
【问题讨论】: