我很烦返回一个更新的json,事实上,我从cxfrs端点收到一个定义为opportunity的json(这是一个业务术语,我们不需要解释它),将它转换成字符串,然后检查jax rs controller中调用的方法,如果我们想更新json,我们在队列q.gestioncougar.cl.creation中将消息发布为字符串,如下所述:
<route id="serviceToCustomerLinksInboundRouting">
<from uri="cxfrs:bean:oab_serviceToObsIT?loggingFeatureEnabled={{gestioncougar.wscall.log.enable}}&loggingSizeLimit={{gestioncougar.wscall.log.size}}" />
<to uri="bean:log?method=info(*,'Body : ${body}')"/>
<convertBodyTo type="java.lang.String" />
<choice>
<when>
<simple>${header.operationName} == 'updateAffair'</simple>
<to uri="activemq:queue:q.gestioncougar.cl.creation?disableReplyTo=true" />
</when>
</choice>
</route>
绑定到jax rs控制器的cxfrs服务的配置:
<cxf:rsServer address="{{gestioncougar.service.in.obsit.url}}" id="oab_serviceToObsIT"
serviceClass="fr.oab.sie.esb.gestioncougar.customerLink.controller.CougarToCL" />
jax rs控制器:
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface CougarToCL {
@PUT
@Path("/updateAffair")
void updateAffair(String request);
}
然后我们创建一个从队列q.gestioncougar.cl.creation中读取的路由,然后将主体解组为pojo格式(java模型),此外,通过bean traitercallfromcougar中定义的converttoclformat方法读取它:
<route id="serviceToCustomerLinksCreationOutboundRoute">
<from uri="activemq:queue:q.gestioncougar.cl.creation" />
<!-- Sauvegarde du body initial -->
<unmarshal ref="formatJsonOpportunity" />
<!-- Sauvegarde du body -->
<setProperty propertyName="savedBody">
<simple>${body}</simple>
</setProperty>
<bean ref="traiterCallFromCougar" method="convertToCLFormat"/>
<to uri="bean:log?method=info(*,'CustomerLinks Body Format: ${body}')"/>
</route>
converttoclformat方法:
public void convertToCLFormat(Exchange exchange){
Opportunity opportunity = exchange.getProperty("savedBody",Opportunity.class);
EsbLogger.info(exchange, "opportunity {}", opportunity.toString());
exchange.getIn().setHeader(Exchange.CONTENT_TYPE, MediaType.APPLICATION_JSON);
exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 200);
Affair affair = opportunityAffairMapper.toDealCL(opportunity.getDealCL());
String clBody = affairJsonParser.parsePojoToJson(affair);
EsbLogger.info(exchange, "affair {}", clBody);
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
exchange.getOut().setBody(clBody);
}
问题来了!,即使我用新Map的json将body定义为affence,我也看不到postman响应中有任何更改,但是当我检查日志时,body已经更改了。
看看 Postman 的要求:
非常感谢你的时间和帮助。
1条答案
按热度按时间khbbv19g1#
不要将转换后的json放在“out”消息中,而是放在“in”消息中。
这是如此混乱,他们现在建议只使用
exchange.getMessage()
(不分内外)更多信息请参见:https://camel.apache.org/manual/latest/camel-3-migration-guide.html#_getout_on_exchange
所以这应该有效: