Spring集成:从消息中删除Jms和Http标头

时间:2018-07-27 16:06:12

标签: spring-boot spring-integration spring-integration-dsl

我有这样的整合流程

订阅者和发布者

Broker->queue1->Transform->HTTP CALL->HTTP Response->JMS Message->Broker->queue2

这是我的集成流程DSL

@Bean
public IntegrationFlow orchestrationFlow() {
    return IntegrationFlows.from(Jms.messageDrivenChannelAdapter(connectionFactory).destination("MAILBOX"))
            //destination("amq.outbound1"))
            .<String, String>transform(s -> {
                return s.toLowerCase();
            }).log()
            .transform(new PojoTransformer())
            //.headerFilter("^(jms?|JMS)://.*$", true)
            .log()
            // HTTP part goes here
            .<String, HttpEntity<String>>transform(HttpEntity::new).handle(

                    Http.outboundGateway("http://localhost:8080/uppsercase").httpMethod(HttpMethod.POST)
                            .extractPayload(true).expectedResponseType(String.class))
            .log()
            .headerFilter("(.*?)", true)
            .log()
            //.<HttpEntity<String>,String>transform(HttpEntity<String>::getBody)
            // and here HTTP part ends
            .handle(Jms.outboundAdapter(connectionFactory).destination("MAILBOXX")).get();
}

public static class PojoTransformer {

    @Transformer
    public String transform(@Payload String email, @Headers MessageHeaders headers) {
        return  email;
    }

}

我想在进行http调用之前从消息中删除Jms标头 还希望在将HTTP标头发送到JMS之前先删除它

我尝试使用@TransformerheaderFilter

使用不同的方法

但是没有任何效果, 由于没有清除标头,因此将不需要的标头发送到JMS和HTTP请求

我在这里粘贴日志

 GenericMessage [payload=something, headers={JMS_IBM_Character_Set=UTF-8, JMS_IBM_MsgType=8, jms_destination=queue:///MAILBOX, JMSXUserID=admin       , JMS_IBM_Encoding=273, priority=4, jms_timestamp=1532706892455, JMSXAppID=SpringIntegrationDemoApplica, JMS_IBM_PutApplType=28, JMS_IBM_Format=MQSTR   , jms_redelivered=false, JMS_IBM_PutDate=20180727, JMSXDeliveryCount=1, JMS_IBM_PutTime=15545246, id=5f5fe393-42e3-9ab9-3170-739bf7e4f72b, jms_messageId=ID:414d5120514d31202020202020202020872a5b5b02781521, timestamp=1532706892732}]
 GenericMessage [payload=something, headers={JMS_IBM_Character_Set=UTF-8, JMS_IBM_MsgType=8, jms_destination=queue:///MAILBOX, JMSXUserID=admin       , JMS_IBM_Encoding=273, priority=4, jms_timestamp=1532706892455, JMSXAppID=SpringIntegrationDemoApplica, JMS_IBM_PutApplType=28, JMS_IBM_Format=MQSTR   , jms_redelivered=false, JMS_IBM_PutDate=20180727, JMSXDeliveryCount=1, JMS_IBM_PutTime=15545246, id=d81f301b-7033-65be-9dd2-6bda3a200b3a, jms_messageId=ID:414d5120514d31202020202020202020872a5b5b02781521, timestamp=1532706892737}]
 GenericMessage [payload=SOMETHING IS CONVERTED TO UPPERCASE, headers={JMS_IBM_Character_Set=UTF-8, JMS_IBM_MsgType=8, jms_destination=queue:///MAILBOX, JMSXUserID=admin       , JMS_IBM_Encoding=273, priority=4, jms_timestamp=1532706892455, http_statusCode=201, Date=1532706892000, JMSXAppID=SpringIntegrationDemoApplica, JMS_IBM_PutApplType=28, JMS_IBM_Format=MQSTR   , jms_redelivered=false, JMS_IBM_PutDate=20180727, JMSXDeliveryCount=1, JMS_IBM_PutTime=15545246, id=e464d287-b32b-0bdc-e008-c3d5bf70e45a, Content-Length=35, contentType=text/plain;charset=UTF-8, jms_messageId=ID:414d5120514d31202020202020202020872a5b5b02781521, timestamp=1532706892783}]
 GenericMessage [payload=SOMETHING IS CONVERTED TO UPPERCASE, headers={JMS_IBM_Character_Set=UTF-8, JMS_IBM_MsgType=8, jms_destination=queue:///MAILBOX, JMSXUserID=admin       , JMS_IBM_Encoding=273, priority=4, jms_timestamp=1532706892455, http_statusCode=201, Date=1532706892000, JMSXAppID=SpringIntegrationDemoApplica, JMS_IBM_PutApplType=28, JMS_IBM_Format=MQSTR   , jms_redelivered=false, JMS_IBM_PutDate=20180727, JMSXDeliveryCount=1, JMS_IBM_PutTime=15545246, id=e464d287-b32b-0bdc-e008-c3d5bf70e45a, Content-Length=35, contentType=text/plain;charset=UTF-8, jms_messageId=ID:414d5120514d31202020202020202020872a5b5b02781521, timestamp=1532706892783}]
: failed to map Message header 'Content-Length' to JMS property

有人可以告诉我为什么我的转换无法正常工作

1 个答案:

答案 0 :(得分:1)

您确实需要使用 var grants = new HashSet<IGrant> { new VoiceGrant() { OutgoingApplicationSid = voiceSid, PushCredentialSid = pushCreds }, new ChatGrant() { ServiceSid = chatSid, PushCredentialSid = pushCreds, EndpointId = $"chatSample_{identity}" }, }; var token = new Token( accSid, apiKey, apiSecret, identity, grants: grants); return token.ToJwt(); ,但仅使用它不支持.headerFilter()的问题:

regexp