2016-06-16 7 views
1

Ich habe Objekt, das über JMS auf ein Bauteil übertragen wird, die über den Kanal-Adapter in die Warteschlange hört:Frühling Integration Java DSL: Geben Sie benutzerdefinierte Deserializer

IntegrationFlows 
       .from(Jms.messageDriverChannelAdapter(connectionFactory) 
         .destination(inputQueue) 
       ) 

Doch diese Art von Setup gibt nur eine Möglichkeit ObjectMessage jedoch zu erhalten Ich möchte einen benutzerdefinierten Deserializer zur Verfügung stellen, der auch BytesMessage akzeptiert. Das gewünschte Setup sieht so aus:

IntegrationFlows 
       .from(Jms.messageDriverChannelAdapter(connectionFactory) 
         .destination(inputQueue) 
         .deserializeWith((javax.jms.Message message) -> new org.springframework.messaging.Message(){}) // Does not exist, but desired 
       ) 

Vielen Dank im Voraus.

Antwort

2

Die Deserialisierung Logik ist ein Teil von org.springframework.jms.support.converter.MessageConverter, die Sie als eine angeben:

.from(Jms.messageDriverChannelAdapter(connectionFactory) 
     .destination(inputQueue) 
     .jmsMessageConverter(...) 
) 

Ich verstehe Ihren Wunsch, dass mit dem Lambda zu machen, aber ich sehe Grund nicht zusätzliche Logik einzuführen, wenn das kann mit einer vorhandenen Abstraktion erreicht werden.

+0

Vielen Dank für Ihre schnelle Antwort. Kleine Frage: Wenn ich es nicht spezifiziere, wird org.springframework.jms.support.converter.SimpleMessageConverter verwendet? – tkachuko

+1

+1: 'ChannelPublishingJmsMessageListener': https://github.com/spring-projects/spring-integration/blob/master/spring-integration-jms/src/main/java/org/springframework/integration/jms/ChannelPublishingJmsMessageListener. Java # L72 –

Verwandte Themen