2017-05-30 1 views
0

Wenn ich Byte-Array an Antwortkanal senden, erwarte ich, nur dieses Byte-Array an den Socket zu senden. Zum Beispiel im Frühjahr Integration ip.Spring-Integration IP - Wagenrücklauf ( r n) am Ende der Nachricht durch Sockets

@ServiceActivator(inputChannel = "serviceChannel") 
public byte[] service(byte[] byteArray) { 
    return new byte[]{0,2,1,0}; 
} 

Ich erwarte, dass es

00, 02, 01, 00 

Aber senden! Dies sendet auch zwei zusätzliche Bytes an den Strom

00, 02, 01, 00 , 0D, 0A 

für Ende der Nachricht. Ich möchte diese Bytes NICHT senden, d. H. Ich möchte sie weglassen. Wie kann dies erreicht werden?

Ich vermute, das hat damit zu tun, wie Sockets Nachrichten interpretieren, aber ich habe nicht gefunden, wo das passiert, egal wie ich es versuchte.

upd: Ich habe das Problem gefunden: Spring in meiner Konfiguration verwendet Klasse ByteArrayCrLfSerializer, aber ich muss ByteArrayRawSerializer verwenden. Wie kann ich das machen?

+0

Bearbeiter erhalten keine Benachrichtigungen über Änderungen an der Frage; Sie sollten stattdessen meine Antwort kommentiert haben. Sie müssen Ihre Verbindungsfactory-Konfiguration anzeigen (bearbeiten Sie die Frage). Wenn Sie die XML-Konfiguration verwenden, verwenden Sie 'serializer =" raw "' wobei 'raw' ein' 'mit der Klasse' ByteArrayRawSerializer' ist. Wenn Sie Java-Konfiguration verwenden, legen Sie einfach den Serializer fest. –

+0

Ich habe deine Antwort an diesem Punkt nicht gesehen :) danke – Sarief

+0

@GaryRussell Ich denke, dass sollte zu Ihrer Antwort hinzugefügt werden, dann wird es abgeschlossen sein und ich werde es akzeptieren können, danke :) – Sarief

Antwort

1

Siehe the Spring Integration documentation about serializers/deserializers.

Sie benötigen im Allgemeinen eine Möglichkeit, mehrere Nachrichten im Stream abzugrenzen. Wenn die Daten inhärent solche Informationen enthalten, können Sie die ByteArrayRawSerializer verwenden, die keine Zeichen hinzufügt.

Wenn Sie die XML-Konfiguration verwenden, verwenden Sie serializer="raw", wobei row ein mit der Klasse ByteArrayRawSerializer ist. Wenn Sie die Java-Konfiguration verwenden, setzen Sie den Serializer einfach auf @Bean.

Wenn Sie solche Nachrichten mit Spring Integration decodieren müssen (und mehr als eine Nachricht über den Socket gesendet wird), benötigen Sie einen benutzerdefinierten Deserializer.

Verwandte Themen