1
1
/*
2
- * Copyright 2002-2015 the original author or authors.
2
+ * Copyright 2002-2016 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -296,8 +296,10 @@ else if (StompCommand.UNSUBSCRIBE.equals(headerAccessor.getCommand())) {
296
296
}
297
297
}
298
298
catch (Throwable ex ) {
299
- logger .error ("Failed to send client message to application via MessageChannel" +
300
- " in session " + session .getId () + ". Sending STOMP ERROR to client." , ex );
299
+ if (logger .isErrorEnabled ()) {
300
+ logger .error ("Failed to send client message to application via MessageChannel" +
301
+ " in session " + session .getId () + ". Sending STOMP ERROR to client." , ex );
302
+ }
301
303
handleError (session , ex , message );
302
304
}
303
305
}
@@ -316,7 +318,7 @@ private void handleError(WebSocketSession session, Throwable ex, Message<byte[]>
316
318
}
317
319
318
320
StompHeaderAccessor accessor = MessageHeaderAccessor .getAccessor (message , StompHeaderAccessor .class );
319
- Assert .notNull (accessor , "Expected STOMP headers" );
321
+ Assert .state (accessor != null , "Expected STOMP headers" );
320
322
sendToClient (session , accessor , message .getPayload ());
321
323
}
322
324
@@ -365,7 +367,9 @@ private void publishEvent(ApplicationEvent event) {
365
367
this .eventPublisher .publishEvent (event );
366
368
}
367
369
catch (Throwable ex ) {
368
- logger .error ("Error publishing " + event , ex );
370
+ if (logger .isErrorEnabled ()) {
371
+ logger .error ("Error publishing " + event , ex );
372
+ }
369
373
}
370
374
}
371
375
@@ -376,27 +380,29 @@ private void publishEvent(ApplicationEvent event) {
376
380
@ SuppressWarnings ("unchecked" )
377
381
public void handleMessageToClient (WebSocketSession session , Message <?> message ) {
378
382
if (!(message .getPayload () instanceof byte [])) {
379
- logger .error ("Expected byte[] payload. Ignoring " + message + "." );
383
+ if (logger .isErrorEnabled ()) {
384
+ logger .error ("Expected byte[] payload. Ignoring " + message + "." );
385
+ }
380
386
return ;
381
387
}
382
388
383
- StompHeaderAccessor stompAccessor = getStompHeaderAccessor (message );
384
- StompCommand command = stompAccessor .getCommand ();
389
+ StompHeaderAccessor accessor = getStompHeaderAccessor (message );
390
+ StompCommand command = accessor .getCommand ();
385
391
386
392
if (StompCommand .MESSAGE .equals (command )) {
387
- if (stompAccessor .getSubscriptionId () == null ) {
393
+ if (accessor .getSubscriptionId () == null && logger . isWarnEnabled () ) {
388
394
logger .warn ("No STOMP \" subscription\" header in " + message );
389
395
}
390
- String origDestination = stompAccessor .getFirstNativeHeader (SimpMessageHeaderAccessor .ORIGINAL_DESTINATION );
396
+ String origDestination = accessor .getFirstNativeHeader (SimpMessageHeaderAccessor .ORIGINAL_DESTINATION );
391
397
if (origDestination != null ) {
392
- stompAccessor = toMutableAccessor (stompAccessor , message );
393
- stompAccessor .removeNativeHeader (SimpMessageHeaderAccessor .ORIGINAL_DESTINATION );
394
- stompAccessor .setDestination (origDestination );
398
+ accessor = toMutableAccessor (accessor , message );
399
+ accessor .removeNativeHeader (SimpMessageHeaderAccessor .ORIGINAL_DESTINATION );
400
+ accessor .setDestination (origDestination );
395
401
}
396
402
}
397
403
else if (StompCommand .CONNECTED .equals (command )) {
398
404
this .stats .incrementConnectedCount ();
399
- stompAccessor = afterStompSessionConnected (message , stompAccessor , session );
405
+ accessor = afterStompSessionConnected (message , accessor , session );
400
406
if (this .eventPublisher != null && StompCommand .CONNECTED .equals (command )) {
401
407
try {
402
408
SimpAttributes simpAttributes = new SimpAttributes (session .getId (), session .getAttributes ());
@@ -411,25 +417,21 @@ else if (StompCommand.CONNECTED.equals(command)) {
411
417
}
412
418
413
419
byte [] payload = (byte []) message .getPayload ();
414
-
415
420
if (StompCommand .ERROR .equals (command ) && getErrorHandler () != null ) {
416
421
Message <byte []> errorMessage = getErrorHandler ().handleErrorMessageToClient ((Message <byte []>) message );
417
- stompAccessor = MessageHeaderAccessor .getAccessor (errorMessage , StompHeaderAccessor .class );
418
- Assert .notNull ( stompAccessor , "Expected STOMP headers" );
422
+ accessor = MessageHeaderAccessor .getAccessor (errorMessage , StompHeaderAccessor .class );
423
+ Assert .state ( accessor != null , "Expected STOMP headers" );
419
424
payload = errorMessage .getPayload ();
420
425
}
421
-
422
- sendToClient (session , stompAccessor , payload );
426
+ sendToClient (session , accessor , payload );
423
427
}
424
428
425
429
private void sendToClient (WebSocketSession session , StompHeaderAccessor stompAccessor , byte [] payload ) {
426
430
StompCommand command = stompAccessor .getCommand ();
427
431
try {
428
432
byte [] bytes = this .stompEncoder .encode (stompAccessor .getMessageHeaders (), payload );
429
-
430
433
boolean useBinary = (payload .length > 0 && !(session instanceof SockJsSession ) &&
431
434
MimeTypeUtils .APPLICATION_OCTET_STREAM .isCompatibleWith (stompAccessor .getContentType ()));
432
-
433
435
if (useBinary ) {
434
436
session .sendMessage (new BinaryMessage (bytes ));
435
437
}
@@ -443,7 +445,9 @@ private void sendToClient(WebSocketSession session, StompHeaderAccessor stompAcc
443
445
}
444
446
catch (Throwable ex ) {
445
447
// Could be part of normal workflow (e.g. browser tab closed)
446
- logger .debug ("Failed to send WebSocket message to client in session " + session .getId (), ex );
448
+ if (logger .isDebugEnabled ()) {
449
+ logger .debug ("Failed to send WebSocket message to client in session " + session .getId (), ex );
450
+ }
447
451
command = StompCommand .ERROR ;
448
452
}
449
453
finally {
@@ -500,9 +504,13 @@ else if (stompAccessor.getCommand() == null || StompCommand.SEND.equals(stompAcc
500
504
private StompHeaderAccessor convertConnectAcktoStompConnected (StompHeaderAccessor connectAckHeaders ) {
501
505
String name = StompHeaderAccessor .CONNECT_MESSAGE_HEADER ;
502
506
Message <?> message = (Message <?>) connectAckHeaders .getHeader (name );
503
- Assert .notNull (message , "Original STOMP CONNECT not found in " + connectAckHeaders );
507
+ if (message == null ) {
508
+ throw new IllegalStateException ("Original STOMP CONNECT not found in " + connectAckHeaders );
509
+ }
510
+
504
511
StompHeaderAccessor connectHeaders = MessageHeaderAccessor .getAccessor (message , StompHeaderAccessor .class );
505
512
StompHeaderAccessor connectedHeaders = StompHeaderAccessor .create (StompCommand .CONNECTED );
513
+
506
514
Set <String > acceptVersions = connectHeaders .getAcceptVersion ();
507
515
if (acceptVersions .contains ("1.2" )) {
508
516
connectedHeaders .setVersion ("1.2" );
@@ -513,13 +521,15 @@ else if (acceptVersions.contains("1.1")) {
513
521
else if (!acceptVersions .isEmpty ()) {
514
522
throw new IllegalArgumentException ("Unsupported STOMP version '" + acceptVersions + "'" );
515
523
}
524
+
516
525
long [] heartbeat = (long []) connectAckHeaders .getHeader (SimpMessageHeaderAccessor .HEART_BEAT_HEADER );
517
526
if (heartbeat != null ) {
518
527
connectedHeaders .setHeartbeat (heartbeat [0 ], heartbeat [1 ]);
519
528
}
520
529
else {
521
530
connectedHeaders .setHeartbeat (0 , 0 );
522
531
}
532
+
523
533
return connectedHeaders ;
524
534
}
525
535
0 commit comments