using spring integration 4.0.3.release jackson2, trying use json transformers in conjunction http gateways.
my pathway looks akin of amqp adapter referenced in spring integration documentation http gateways(1):
...->object-to-json-transformer->http-outbound-gateway---->
---->http-inbound-gateway->json-to-object-transformer->
client:
<int:chain id="messagetransformerchain" input-channel="toserver" output-channel="messagestoserver"> ... <int:object-to-json-transformer /> </int:chain> <int-http:outbound-gateway id="httpouttosever" request-channel="messagestoserver" reply-channel="replyfromserver" url="${server.endpoint}" http-method="post" extract-request-payload="true" expected-response-type="java.lang.string" />
server:
<int-http:inbound-gateway id="httpinboundfromclientgateway" supported-methods="get, post" request-channel="fromclientchannel" /> <int:chain input-channel="fromclientchannel"> <int:json-to-object-transformer /> ... </int:chain>
the exception getting (what think relevant in bold):
2014-08-22t23:58:21.640-0400 warn [http-bio-8080-exec-2] o.s.i.h.i.httprequesthandlingmessaginggateway failure occurred in gateway sendandreceive org.springframework.integration.transformer.messagetransformationexception: failed transform message @ org.springframework.integration.transformer.abstracttransformer.transform(abstracttransformer.java:44) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.transformer.messagetransforminghandler.handlerequestmessage(messagetransforminghandler.java:68) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.handler.abstractreplyproducingmessagehandler.handlemessageinternal(abstractreplyproducingmessagehandler.java:170) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.handler.abstractmessagehandler.handlemessage(abstractmessagehandler.java:78) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.handler.messagehandlerchain.handlemessageinternal(messagehandlerchain.java:131) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.handler.abstractmessagehandler.handlemessage(abstractmessagehandler.java:78) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.dispatcher.abstractdispatcher.tryoptimizeddispatch(abstractdispatcher.java:116) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.dispatcher.unicastingdispatcher.dodispatch(unicastingdispatcher.java:101) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.dispatcher.unicastingdispatcher.dispatch(unicastingdispatcher.java:97) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.channel.abstractsubscribablechannel.dosend(abstractsubscribablechannel.java:77) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.channel.abstractmessagechannel.send(abstractmessagechannel.java:255) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.messaging.core.genericmessagingtemplate.dosend(genericmessagingtemplate.java:109) ~[spring-messaging-4.0.6.release.jar:4.0.6.release] @ org.springframework.messaging.core.genericmessagingtemplate.dosendandreceive(genericmessagingtemplate.java:144) ~[spring-messaging-4.0.6.release.jar:4.0.6.release] @ org.springframework.messaging.core.genericmessagingtemplate.dosendandreceive(genericmessagingtemplate.java:44) ~[spring-messaging-4.0.6.release.jar:4.0.6.release] @ org.springframework.messaging.core.abstractmessagingtemplate.sendandreceive(abstractmessagingtemplate.java:75) ~[spring-messaging-4.0.6.release.jar:4.0.6.release] @ org.springframework.integration.gateway.messaginggatewaysupport.dosendandreceive(messaginggatewaysupport.java:250) [spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.gateway.messaginggatewaysupport.sendandreceivemessage(messaginggatewaysupport.java:224) [spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.http.inbound.httprequesthandlingendpointsupport.actualdohandlerequest(httprequesthandlingendpointsupport.java:473) [spring-integration-http-4.0.3.release.jar:na] @ org.springframework.integration.http.inbound.httprequesthandlingendpointsupport.dohandlerequest(httprequesthandlingendpointsupport.java:370) [spring-integration-http-4.0.3.release.jar:na] @ org.springframework.integration.http.inbound.httprequesthandlingmessaginggateway.handlerequest(httprequesthandlingmessaginggateway.java:101) [spring-integration-http-4.0.3.release.jar:na] @ org.springframework.web.servlet.mvc.httprequesthandleradapter.handle(httprequesthandleradapter.java:51) [spring-webmvc-4.0.6.release.jar:4.0.6.release] @ org.springframework.web.servlet.dispatcherservlet.dodispatch(dispatcherservlet.java:938) [spring-webmvc-4.0.6.release.jar:4.0.6.release] caused by: java.lang.illegalargumentexception: not resolve 'json__typeid__' in 'javatypes'. @ org.springframework.integration.support.json.abstractjacksonjsonobjectmapper.createjavatype(abstractjacksonjsonobjectmapper.java:67) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.support.json.jackson2jsonobjectmapper.extractjavatype(jackson2jsonobjectmapper.java:119) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.support.json.jackson2jsonobjectmapper.extractjavatype(jackson2jsonobjectmapper.java:44) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.support.json.abstractjacksonjsonobjectmapper.fromjson(abstractjacksonjsonobjectmapper.java:60) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.json.jsontoobjecttransformer.dotransform(jsontoobjecttransformer.java:81) ~[spring-integration-core-4.0.3.release.jar:na] @ org.springframework.integration.transformer.abstracttransformer.transform(abstracttransformer.java:33) ~[spring-integration-core-4.0.3.release.jar:na] ... 102 common frames omitted
when debug, see on client side json__typeid__
header has been stripped outgoing message. when add jsonheaders.headers
defaulthttpheadermapper
, inject gateways mapper, see when mapper work done, json headers present, when end in resttemplate.dowithrequest
requestheaders
no longer contain json ones. , of course, same exception server side.
perhaps configurations incorrect, header being stripped i'm not sure how server side able json-to-object
transformation.
i prefer not explicitly indicate type on specific mappers channels since can vary. there way configure components need support pathway?
-- references --
(1) http://docs.spring.io/spring-integration/reference/html/messaging-transformation-chapter.html#transformer scroll json transformers subsection
with outbound http adapter, user headers (in case json type information) conveyed on http x-<header>
...
<int-http:outbound-gateway request-channel="requestchannel" url="http://localhost:18080/http/receivegateway" http-method="post" mapped-request-headers="foo" expected-response-type="java.lang.string"/> post /http/receivegateway http/1.1 accept: text/plain, */* x-foo: bar
on server side, x-
not removed have map x...
<int-http:inbound-gateway request-channel="receivechannel" path="/receivegateway" mapped-request-headers="x-foo" supported-methods="post"/>
you need <header-enricher/>
in <chain/>
before transformer set headers (minus 'x-')...
<int:header-enricher> <int:header name="json__typeid__" expression="headers['x-json__typeid__']" /> ... </int:header-enricher>
(note lower case x
).
edit:
or, on sending side, can configure mapper not prefix custom header(s)...
<bean id="mapper" class="org.springframework.integration.http.support.defaulthttpheadermapper"> <property name="outboundheadernames" value="foo,bar" /> <property name="userdefinedheaderprefix" value="" /> </bean>
Comments
Post a Comment