我有这样的整合流程
订阅者和发布者
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之前先删除它
我尝试使用@Transformer
和headerFilter
但是没有任何效果, 由于没有清除标头,因此将不需要的标头发送到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
有人可以告诉我为什么我的转换无法正常工作
答案 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