Re: CXF 2.7.0 webclient.getCollection()类型转换错误

130 views
Skip to first unread message

kevin liu

unread,
Oct 17, 2013, 5:09:57 AM10/17/13
to cxf...@googlegroups.com
原因找到了,不支持直接返回数组的JSO格式,需要将数组放到对象中就能正常解析了.


On Friday, March 8, 2013 9:43:49 AM UTC+8, kevin liu wrote:
大家好!

   我这边遇到了一个问题困扰了好久,不知道有那位兄弟遇到过,帮忙分析一下原因
   在浏览器中返回JSON数据是这样的:  [{"processCode":"inc-1","status":"一线处理中","title":"PC2001无线网络无法链接"},{"processCode":"inc-2","status":"经理审批中","title":"运维系统无法访问"}]

   客户端代码:
public static void  main(String args[]){
List<JSONProvider> providers=new ArrayList<JSONProvider>();
JSONProvider jsonProvider=new JSONProvider();
jsonProvider.setDropRootElement(true);
jsonProvider.setDropCollectionWrapperElement(true);
jsonProvider.setSerializeAsArray(true);
jsonProvider.setMarshallAsJaxbElement(true);
jsonProvider.setUnmarshallAsJaxbElement(true);
jsonProvider.setSupportUnwrapped(true);
providers.add(jsonProvider);
WebClient client = WebClient.create(endPoint,providers);
client.path("ssdservice").path("issuelist").header("accessToken", "hello world!").query("Username", "admin").query("start", 0).query("limit", 10); //设置查询参数
client.type("application/xml").accept("application/json");
client.getCollection(IssueListResult.class);//发送GET请求
}

IssueListResult 类定义:
public class IssueListResult {
/** 工单号 */
private String processCode;
/** 工单标题 */
private String title;//
/** 工单状态 */
private String status;
public String getProcessCode() {
return processCode;
}
public void setProcessCode(String processCode) {
this.processCode = processCode;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}


异常堆是这样的:

2013-3-8 9:29:37 org.apache.cxf.jaxrs.client.AbstractClient reportMessageHandlerProblem
严重: .Problem with reading the response message, class : interface java.util.Collection, ContentType : application/json;charset=UTF-8.
Exception in thread "main" javax.ws.rs.client.ClientException: .Problem with reading the response message, class : interface java.util.Collection, ContentType : application/json;charset=UTF-8.
at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:662)
at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:474)
at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:960)
at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:944)
at org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:894)
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:761)
at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:748)
at org.apache.cxf.jaxrs.client.WebClient.invokeAndGetCollection(WebClient.java:403)
at org.apache.cxf.jaxrs.client.WebClient.getCollection(WebClient.java:479)
at com.test.main(BaseTestCase.java:244)
Caused by: javax.ws.rs.WebApplicationException: java.lang.ClassCastException: com.test.IssueListResult cannot be cast to org.apache.cxf.jaxrs.provider.AbstractJAXBProvider$CollectionWrapper
at org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:249)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1141)
at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:470)
... 8 more
Caused by: java.lang.ClassCastException: com.test.IssueListResult cannot be cast to org.apache.cxf.jaxrs.provider.AbstractJAXBProvider$CollectionWrapper
at org.apache.cxf.jaxrs.provider.json.JSONProvider.readFrom(JSONProvider.java:231)
Reply all
Reply to author
Forward
0 new messages