HttpInboundEndpoint now deserializes objects if request content-type is "application/x-java-serialized-object".

This commit is contained in:
Mark Fisher
2009-03-13 21:16:35 +00:00
parent 7bdc389ec2
commit e25407e469

View File

@@ -20,6 +20,7 @@ import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
@@ -38,6 +39,7 @@ import org.springframework.integration.core.Message;
import org.springframework.integration.gateway.SimpleMessagingGateway;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.integration.message.MessageTimeoutException;
import org.springframework.util.Assert;
import org.springframework.web.HttpRequestHandler;
import org.springframework.web.servlet.View;
@@ -126,6 +128,10 @@ public class HttpInboundEndpoint extends SimpleMessagingGateway implements HttpR
* By default, only GET and POST are supported.
*/
public void setSupportedMethods(String... supportedMethods) {
Assert.notEmpty(supportedMethods, "at least one supported method is required");
for (int i = 0; i < supportedMethods.length; i++) {
supportedMethods[i] = supportedMethods[i].trim().toUpperCase();
}
this.supportedMethods = Arrays.asList(supportedMethods);
}
@@ -213,7 +219,7 @@ public class HttpInboundEndpoint extends SimpleMessagingGateway implements HttpR
* Create a request Message for the provided HTTP request.
* @see #setExtractRequestPayload(boolean)
*/
private Message<?> createRequestMessage(HttpServletRequest httpRequest) throws IOException {
private Message<?> createRequestMessage(HttpServletRequest httpRequest) throws ServletException, IOException {
if (this.extractRequestPayload) {
return this.createMessageFromHttpRequestContent(httpRequest);
}
@@ -222,7 +228,7 @@ public class HttpInboundEndpoint extends SimpleMessagingGateway implements HttpR
}
}
private Message<?> createMessageFromHttpRequestContent(HttpServletRequest request) throws IOException {
private Message<?> createMessageFromHttpRequestContent(HttpServletRequest request) throws ServletException, IOException {
Message<?> message = null;
String contentType = request.getContentType();
if (request.getMethod().equals("GET")) {
@@ -249,6 +255,14 @@ public class HttpInboundEndpoint extends SimpleMessagingGateway implements HttpR
}
payload = sb.toString();
}
else if (contentType != null && contentType.equals("application/x-java-serialized-object")) {
try {
payload = new ObjectInputStream(request.getInputStream()).readObject();
}
catch (ClassNotFoundException e) {
throw new ServletException("failed to deserialize Object in request", e);
}
}
else {
InputStream stream = request.getInputStream();
int length = request.getContentLength();