2016-12-16 3 views
0

私の質問は、SIエンドポイント間でオブジェクトを渡す方法ですか?Springの統合、JSONとの変換に@Transformerを使用するには?

ほとんど私が注釈を使用していますが、この例外

Caused by: java.lang.IllegalArgumentException: Could not resolve 'json__TypeId__' in 'javaTypes'. 
    at org.springframework.integration.support.json.AbstractJacksonJsonObjectMapper.createJavaType(AbstractJacksonJsonObjectMapper.java:68) 
    at org.springframework.integration.support.json.Jackson2JsonObjectMapper.extractJavaType(Jackson2JsonObjectMapper.java:116) 
    at org.springframework.integration.support.json.Jackson2JsonObjectMapper.extractJavaType(Jackson2JsonObjectMapper.java:52) 
    at org.springframework.integration.support.json.AbstractJacksonJsonObjectMapper.fromJson(AbstractJacksonJsonObjectMapper.java:61) 
    at org.springframework.integration.json.JsonToObjectTransformer.doTransform(JsonToObjectTransformer.java:87) 
    at org.springframework.integration.transformer.AbstractTransformer.transform(AbstractTransformer.java:33) 
    ... 18 more 
を解決する方法がわからない、XML設定を使用していたすべての例

人々たとえば、この問題を解決するためにXMLを使用することをお勧めし

<bean class="org.springframework.amqp.support.converter.DefaultClassMapper"> 
    <property name="defaultType" value="foo.MyObject" /> 
</bean> 

しかし、私はこの

@Bean 
    @Transformer(inputChannel="fromTcp", outputChannel="toHandler") 
    JsonToObjectTransformer jsonToObjectTransformer() { 
     ObjectMapper mapper = new ObjectMapper();  
     JsonObjectMapper<JsonNode, JsonParser> jm = new Jackson2JsonObjectMapper(mapper); 
     return new JsonToObjectTransformer(jm); 
    } 
のように、メッセージがチャネルからの受信処理する変圧器を作成するために、アノテーションを使用しています210

実際には、SIエンドポイント間でオブジェクトを渡す方法がわかりません。私は文字列を渡すことができ、SIはStringをbyte []に​​、byte []をStringに処理するためにデフォルトのserializeを使用します。

答えて

1

コンバータは、変換するタイプを知る必要があります。あなたがタイプを提供していないので、タイプ情報を含んでいるヘッダーを探すことに戻ります。

XMLのと同等です:

​​
+0

感謝ゲイリー。 JsonToObjectTransformerを両側で使用しますか? (送信/受信) 、またはObjectToJsonTransformerがありますか? –

+0

はい。 'ObjectToJsonTransformer'があります。受信側で必要な場合に備えて、型情報でヘッダを設定します。 –

+0

ゲイリー、私はそれがすべて働いた得る。ありがとう。他の人がこれに遭遇した場合に備えて、この情報を追加したいだけです。 jackson libの場合、チャネルに渡されたオブジェクトにデフォルトのコンストラクタがない場合は、mapper.addMixIn(target、mixInClass)を使用し、target.classとマッパーをパラメータとして使用して、JsonToObjectTransformer(MyObject.class、mapper) –

関連する問題