java - Http Gateways and Json Transformers: stripped headers -


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