Browse Source

Remove Jackson dependency from TransportHandler hierarchy

Prior to this change, AbstractHttpReceivingTransportHandler had a direct
dependency on a Jacckson Exception (checking that exception in a catch
clause). This can cause issues for applications that don't have that
dependency.

This commit removes that direct dependency, still logging the
appropriate log messages using a parent exception (IOException) and
reflection.

Issue: SPR-11963
(cherry picked from commit e549103)
pull/618/head
Brian Clozel 12 years ago committed by Juergen Hoeller
parent
commit
ce6adfbe35
  1. 23
      spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/AbstractHttpReceivingTransportHandler.java

23
spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/AbstractHttpReceivingTransportHandler.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2014 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,8 +19,6 @@ package org.springframework.web.socket.sockjs.transport.handler;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import com.fasterxml.jackson.databind.JsonMappingException;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpRequest;
@ -56,14 +54,15 @@ public abstract class AbstractHttpReceivingTransportHandler extends AbstractTran
try { try {
messages = readMessages(request); messages = readMessages(request);
} }
catch (JsonMappingException ex) {
logger.error("Failed to read message", ex);
handleReadError(response, "Payload expected.", sockJsSession.getId());
return;
}
catch (IOException ex) { catch (IOException ex) {
logger.error("Failed to read message", ex); logger.error("Failed to read message", ex);
handleReadError(response, "Broken JSON encoding.", sockJsSession.getId()); if (ex.getClass().getName().contains("Mapping")) {
// e.g. Jackson's JsonMappingException, indicating an incomplete payload
handleReadError(response, "Payload expected.", sockJsSession.getId());
}
else {
handleReadError(response, "Broken JSON encoding.", sockJsSession.getId());
}
return; return;
} }
catch (Throwable ex) { catch (Throwable ex) {
@ -87,10 +86,10 @@ public abstract class AbstractHttpReceivingTransportHandler extends AbstractTran
sockJsSession.delegateMessages(messages); sockJsSession.delegateMessages(messages);
} }
private void handleReadError(ServerHttpResponse resp, String error, String sessionId) { private void handleReadError(ServerHttpResponse response, String error, String sessionId) {
try { try {
resp.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR); response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
resp.getBody().write(error.getBytes("UTF-8")); response.getBody().write(error.getBytes("UTF-8"));
} }
catch (IOException ex) { catch (IOException ex) {
throw new SockJsException("Failed to send error: " + error, sessionId, ex); throw new SockJsException("Failed to send error: " + error, sessionId, ex);

Loading…
Cancel
Save