Skip to content

The StompSession.send() ignore ByteArrayMessageConverter and don't set correct content type. #23358

Closed
@somjik-api

Description

@somjik-api

Affects: spring-messaging:5.1.8.REALEASE

Setup:

WebSocketStompClient client = new WebSocketStompClient(new JettyWebSocketClient(webSockClient));
client.setMessageConverter(new ByteArrayMessageConverter());
StompSession ses = client.connect(cfg.serverUri() + AGENTS_PATH, new AfterConnectedSessionHandler());
ses.send("/app/some/destination", new byte[]{-37,75,0,0,1,0,24});

Result after message receive without correct content-type header

@MessageMapping("/app/some/destination")
public void data(byte[] data) {}

After receive message, data is equals: new byte[]{-17, -65, -67, 75, 0, 0, 1}

Result after message receive with correct content-type header

StompHeaders headers = new StompHeaders();
headers.setContentType(MimeTypeUtils.APPLICATION_OCTET_STREAM);
headers.setDestination("/app/some/destination");

ses.send(headers, new byte[]{-37,75,0,0,1,0,24});

After send message with content-type we receive correct byte array on server side.

The root cause here:

private Message<byte[]> createMessage(StompHeaderAccessor accessor, Object payload) {
	accessor.updateSimpMessageHeadersFromStompHeaders();
	Message<byte[]> message;
	if (payload == null) {
		message = MessageBuilder.createMessage(EMPTY_PAYLOAD, accessor.getMessageHeaders());
	}
        // WE DON'T CALL ByteArrayMessageConverter :(
	else if (payload instanceof byte[]) {
		message = MessageBuilder.createMessage((byte[]) payload, accessor.getMessageHeaders());
	}
	else {
		message = (Message<byte[]>) getMessageConverter().toMessage(payload, accessor.getMessageHeaders());
		accessor.updateStompHeadersFromSimpMessageHeaders();
		if (message == null) {
			throw new MessageConversionException("Unable to convert payload with type='" +
					payload.getClass().getName() + "', contentType='" + accessor.getContentType() +
					"', converter=[" + getMessageConverter() + "]");
		}
	}
	return message;
}

Metadata

Metadata

Assignees

Labels

in: messagingIssues in messaging modules (jms, messaging)

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions