2017-07-17 95 views
1

我可以在这里找到一些关于以下问题的帮助: 调用转换器将输入对象转换为Map对象并调用处理程序,处理程序缺少以前添加的标题值。 为什么要将有效载荷转换为丢失所有标题的Map对象?春季集成DSL变压器

//Adding header here setHeader("t", "t"); 
    @ResponseBody 
    public EmResponse getAuditTrail(@Valid @RequestBody NGAuditTrailEntry auditEntry) { 
     LOG.info("Audit Service Called, creating new audit " + auditEntry); 
     AuditCreationFlow.CreateAuditGateway auditGateway = applicationContext.getBean(AuditCreationFlow.CreateAuditGateway.class); 
     MessageBuilder messageBuilder = MessageBuilder.withPayload(auditEntry).setHeader("t", "t"); 
     Object response = auditGateway.createAudit(messageBuilder.build()); 
     EmResponse res = new EmResponse(); 
     LOG.info("Done with Audit creation. Response " + response); 
     return res; 
    } 

//Integration flow starts here 
     public IntegrationFlow createAuditGatewayFlow() { 
       LOG.debug("Entered to spring integration flow to create the Audit entry"); 
       return IntegrationFlows.from("auditInputChannel") 
         .handle(auditObjTransformer, "transformToEjbCompatible") 
         .handle(ejbCaller, "callEjb") 
         .get(); 
    } 

//Transforming payload object to map 
    @Component 
    public class AuditObjTransformer { 
     private final Logger LOG = LoggerFactory.getLogger(this.getClass()); 
     @Transformer 
     public Object transformToEjbCompatible(NGAuditTrailEntry ngAuditTrailEntry, Map<String, Object> headers){ 
      LOG.debug("Transforming the NGAuditTrailEntry To AuditEntry object which is EJB compatible"); 
      //@TODO - Tranformation code goes here. 

      String s = ngAuditTrailEntry.getObjectName(); 
      Map<String, String> m = new HashMap<>(); 
      m.put("x", s); 
      return m; 
     } 

//Here in this handler, not getting headers what I added in the rest service above. 

    public class EJBCaller { 
    private final Logger LOG = LoggerFactory.getLogger(this.getClass()); 
    public Object callEjb(Object payload, Map<String, Object> headers) throws EJBResponseException{ 
     LOG.debug("Calling Audit EJB to crated Audit entry."); 
     //@TODO EJB calling code goese here. 
     LOG.debug("Returned from EJB after creating Audit entry. Returned value" + payload); 
     return payload; 
    } 

如果变换不是映射,那么在标题中没有问题。

感谢, 西瓦

回答

1
callEjb(Object payload, Map<String, Object> headers) 

如果有效载荷是Map,你有一个有效载荷在​​,并在同一时间headers方法的参数。

为了使它的工作,准确地进行headersMap的说法,你应该使用它@Headers注释:

* Annotation which indicates that a method parameter should be bound to the headers of a 
* message. The annotated parameter must be assignable to {@link java.util.Map} with 
* String keys and Object values. 
+0

这工作,谢谢你比兰 – Sdubba