2016-11-30 6 views
1

Apache Camelコンポーネントhttp4を使用して、REST Webサービスからデータを要求します。Apache CamelによるJSONのアンマーシャリング

このRESTサービスの応答タイプはJSONです。

{"coord":{"lon":145.77,"lat":-16.92},"weather": 
[{"id":802,"main":"Clouds","description":"scattered 
clouds","icon":"03n"}],"base":"stations", 
.... 

私はJSONは私が注釈付きクラスを参照しているJsonDataFormatを定義したキャメルのルートの中で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; 

... 

を反映したJavaクラスを注釈を付けています。

... 
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: com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:81)でCOORDを 〜[XStreamの-1.4.9.jar:1.4.9]

  • 私はunmarshalType
  • としてクラスCOORDを使用しようとしました
  • 私はまた、JSON-注釈

答えて

1

ない純粋なPOJOを試してみましたunmarshalType

  • の完全修飾名を使用するには、あなたのデータ形式のJsonLibraryとしてジャクソンを指定してみてくださいことはできますか?あなたが使用して注釈は、ジャクソンのですまだXStreamのは、アンマーシャリングを実行しようとします:私が見たeveryhtingから

    JsonDataFormat jsonDataFormat = new JsonDataFormat(JsonLibrary.Jackson); 
    jsonDataFormat.setUnmarshalType(Report.class); 
    

    は、この動作するはずです。

  • +0

    はい、JSONLibrary.Jacksonを使用して解決策でした、ありがとう – ABX