我使用Apache Camel组件http4从REST Web服务请求数据。
此REST服务的响应类型是JSON。
{"coord":{"lon":145.77,"lat":-16.92},"weather":
[{"id":802,"main":"Clouds","description":"scattered
clouds","icon":"03n"}],"base":"stations",
....
我有一个JSON注释的Java类,它反映了JSON结构
@JsonPropertyOrder({
"coord",
"weather",
"base",
...
})
public class Report {
@JsonProperty("coord")
private Coord coord;
@JsonProperty("weather")
private List<Weather> weather = new ArrayList<Weather>();
@JsonProperty("base")
private String base;
...
在Camel Route中我定义了一个JsonDataFormat,它引用了带注释的类。
...
public void configure() throws Exception {
JsonDataFormat jsonDataFormat = new JsonDataFormat();
jsonDataFormat.setUnmarshalType(Report.class);
from(timer....).to("http4://${url}").unmarshal(jsonDataFormat).bean(myService);
这导致异常:
com.thoughtworks.xstream.mapper.CannotResolveClassException:coord at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:81) 〜[XStream的-1.4.9.jar:1.4.9]
答案 0 :(得分:1)
您可以尝试将Jackson指定为数据格式的JsonLibrary吗?您使用的注释是杰克逊的XStream尝试执行解组:
JsonDataFormat jsonDataFormat = new JsonDataFormat(JsonLibrary.Jackson);
jsonDataFormat.setUnmarshalType(Report.class);
从每一个人的角度来看,我都认为这应该有用。