List of usage examples for org.springframework.messaging.simp.stomp StompHeaderAccessor getDetailedLogMessage
@Override
public String getDetailedLogMessage(@Nullable Object payload)
From source file:org.springframework.messaging.simp.stomp.DefaultStompSession.java
private void execute(Message<byte[]> message) { if (logger.isTraceEnabled()) { StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); if (accessor != null) { logger.trace("Sending " + accessor.getDetailedLogMessage(message.getPayload())); }/*from w w w. ja v a 2s.c o m*/ } TcpConnection<byte[]> conn = this.connection; Assert.state(conn != null, "Connection closed"); try { conn.send(message).get(); } catch (ExecutionException ex) { throw new MessageDeliveryException(message, ex.getCause()); } catch (Throwable ex) { throw new MessageDeliveryException(message, ex); } }
From source file:org.springframework.messaging.simp.stomp.DefaultStompSession.java
@Override public void handleMessage(Message<byte[]> message) { StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); Assert.state(accessor != null, "No StompHeaderAccessor"); accessor.setSessionId(this.sessionId); StompCommand command = accessor.getCommand(); Map<String, List<String>> nativeHeaders = accessor.getNativeHeaders(); StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(nativeHeaders); boolean isHeartbeat = accessor.isHeartbeat(); if (logger.isTraceEnabled()) { logger.trace("Received " + accessor.getDetailedLogMessage(message.getPayload())); }// www . j ava 2s. c om try { if (StompCommand.MESSAGE.equals(command)) { DefaultSubscription subscription = this.subscriptions.get(stompHeaders.getSubscription()); if (subscription != null) { invokeHandler(subscription.getHandler(), message, stompHeaders); } else if (logger.isDebugEnabled()) { logger.debug("No handler for: " + accessor.getDetailedLogMessage(message.getPayload()) + ". Perhaps just unsubscribed?"); } } else { if (StompCommand.RECEIPT.equals(command)) { String receiptId = stompHeaders.getReceiptId(); ReceiptHandler handler = this.receiptHandlers.get(receiptId); if (handler != null) { handler.handleReceiptReceived(); } else if (logger.isDebugEnabled()) { logger.debug( "No matching receipt: " + accessor.getDetailedLogMessage(message.getPayload())); } } else if (StompCommand.CONNECTED.equals(command)) { initHeartbeatTasks(stompHeaders); this.version = stompHeaders.getFirst("version"); this.sessionFuture.set(this); this.sessionHandler.afterConnected(this, stompHeaders); } else if (StompCommand.ERROR.equals(command)) { invokeHandler(this.sessionHandler, message, stompHeaders); } else if (!isHeartbeat && logger.isTraceEnabled()) { logger.trace("Message not handled."); } } } catch (Throwable ex) { this.sessionHandler.handleException(this, command, stompHeaders, message.getPayload(), ex); } }
From source file:org.springframework.messaging.simp.stomp.StompDecoder.java
/** * Decode a single STOMP frame from the given {@code buffer} into a {@link Message}. *///from ww w.j a v a 2s .c o m @Nullable private Message<byte[]> decodeMessage(ByteBuffer byteBuffer, @Nullable MultiValueMap<String, String> headers) { Message<byte[]> decodedMessage = null; skipLeadingEol(byteBuffer); // Explicit mark/reset access via Buffer base type for compatibility // with covariant return type on JDK 9's ByteBuffer... Buffer buffer = byteBuffer; buffer.mark(); String command = readCommand(byteBuffer); if (command.length() > 0) { StompHeaderAccessor headerAccessor = null; byte[] payload = null; if (byteBuffer.remaining() > 0) { StompCommand stompCommand = StompCommand.valueOf(command); headerAccessor = StompHeaderAccessor.create(stompCommand); initHeaders(headerAccessor); readHeaders(byteBuffer, headerAccessor); payload = readPayload(byteBuffer, headerAccessor); } if (payload != null) { if (payload.length > 0) { StompCommand stompCommand = headerAccessor.getCommand(); if (stompCommand != null && !stompCommand.isBodyAllowed()) { throw new StompConversionException(stompCommand + " shouldn't have a payload: length=" + payload.length + ", headers=" + headers); } } headerAccessor.updateSimpMessageHeadersFromStompHeaders(); headerAccessor.setLeaveMutable(true); decodedMessage = MessageBuilder.createMessage(payload, headerAccessor.getMessageHeaders()); if (logger.isTraceEnabled()) { logger.trace("Decoded " + headerAccessor.getDetailedLogMessage(payload)); } } else { logger.trace("Incomplete frame, resetting input buffer..."); if (headers != null && headerAccessor != null) { String name = NativeMessageHeaderAccessor.NATIVE_HEADERS; @SuppressWarnings("unchecked") MultiValueMap<String, String> map = (MultiValueMap<String, String>) headerAccessor .getHeader(name); if (map != null) { headers.putAll(map); } } buffer.reset(); } } else { StompHeaderAccessor headerAccessor = StompHeaderAccessor.createForHeartbeat(); initHeaders(headerAccessor); headerAccessor.setLeaveMutable(true); decodedMessage = MessageBuilder.createMessage(HEARTBEAT_PAYLOAD, headerAccessor.getMessageHeaders()); if (logger.isTraceEnabled()) { logger.trace("Decoded " + headerAccessor.getDetailedLogMessage(null)); } } return decodedMessage; }