2017-08-28 13 views
1

で私は春の統合DSLに新しいですし、私が問題にして立ち往生しています。私は、フロー全体の中で再利用可能なSession変数のような、フロー内の特定のポイントまたはフローの他のポイントで、フローの先頭からObjectを使用する必要があります。ここでは、udp要求を変換し、それをapi関数に送信されるhttp要求に変換し、受信した応答にudp応答を生成するために必要なデータが含まれていない例を示します。ですから、何とか私はudpリクエストに含まれているudpレスポンスのデータが必要です。私はスプリッタについて考えていましたが、それが解決策ではないと思ったり、現在のIntegratinフローを自分のニーズにまで拡張しています。私はシステムが疎結合ではないことを知っていますが、これを行う方法でなければなりません。春の統合のJava DSL - 再利用可能なオブジェクトフロー

@Bean 
public IntegrationFlow udpHttpFlow() { 
    return IntegrationFlows.from(udpInboundChannel()) 
      .transform(udpRequestTransformer()) 
      /* udp request object to use */ 
      .<UdpRequest, Boolean>route(SessionObject::sessionExists, mapping -> mapping 
        .subFlowMapping(false, sf -> sf 
          .transform(httpRequestTransformer()) 
          .handle(httpOutboundGateway()) 
          .transform(httpResponseTransformer())) 
          /*use udp object here .handle(...) */ 
        .subFlowMapping(true, sf -> sf 
         /* .handle(...) */ 
      .transform(udpResponseTransformer()) 
      .handle(udpOutboundChannel()) 
      .get(); 
} 

答えて

2

は、それを解決enrichHeaders方法を使用していました。

@Bean 
public IntegrationFlow udpHttpFlow() { 
    return IntegrationFlows.from(udpInboundChannel()) 
      .transform(udpRequestTransformer()) 
      /* save udb request object to message header */ 
      .enrichHeaders(s -> s.headerExpressions(h -> h.put("udp", "payload"))) 
      .<UdpRequest, Boolean>route(SessionObject::sessionExists, mapping -> mapping 
        .subFlowMapping(false, sf -> sf 
          .transform(httpRequestTransformer()) 
          .handle(httpOutboundGateway()) 
          .transform(httpResponseTransformer()) 
          /* an example how to use the udp request object */ 
          .handle((payload, headers) -> headers.get("udp"))) 
        .subFlowMapping(true, sf -> sf 
         /* .handle(...) */ 
      .transform(udpResponseTransformer()) 
      .handle(udpOutboundChannel()) 
      .get(); 
} 
関連する問題