[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/transport/servlet ...
Ron Sigal
ron_sigal at yahoo.com
Wed Oct 31 22:06:01 EDT 2007
User: rsigal
Date: 07/10/31 22:06:01
Modified: src/main/org/jboss/remoting/transport/servlet Tag:
remoting_2_x ServletServerInvoker.java
Log:
JBREM-675: (1) Eliminated hard coding of invoker ObjectName; (2) use code 200 instead of 204 for HTTPClientInvoker client; (3) default to returning Exception instead of error message.
Revision Changes Path
No revision
No revision
1.8.4.5 +47 -28 JBossRemoting/src/main/org/jboss/remoting/transport/servlet/ServletServerInvoker.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ServletServerInvoker.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/transport/servlet/ServletServerInvoker.java,v
retrieving revision 1.8.4.4
retrieving revision 1.8.4.5
diff -u -b -r1.8.4.4 -r1.8.4.5
--- ServletServerInvoker.java 11 Oct 2007 04:56:25 -0000 1.8.4.4
+++ ServletServerInvoker.java 1 Nov 2007 02:06:01 -0000 1.8.4.5
@@ -77,11 +77,6 @@
return HTTPMarshaller.DATATYPE;
}
- public String getMBeanObjectName()
- {
- return "jboss.remoting:service=invoker,transport=servlet";
- }
-
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
Map metadata = new HashMap();
@@ -174,6 +169,14 @@
{
byte[] retval = new byte[0];
+ // Check if client is HTTPClientInvoker
+ boolean isRemotingUserAgent = false;
+ String userAgent = request.getHeader(HTTPMetadataConstants.REMOTING_USER_AGENT);
+ if (userAgent != null)
+ {
+ isRemotingUserAgent = userAgent.startsWith("JBossRemoting");
+ }
+
Map metadata = new HashMap();
Enumeration enumer = request.getHeaderNames();
@@ -196,7 +199,7 @@
try
{
- Object invocationResponse = null;
+ Object responseObject = null;
ServletInputStream inputStream = request.getInputStream();
UnMarshaller unmarshaller = getUnMarshaller();
@@ -213,6 +216,16 @@
if(obj instanceof InvocationRequest)
{
invocationRequest = (InvocationRequest) obj;
+
+ Map requestMap = invocationRequest.getRequestPayload();
+ if (requestMap == null)
+ {
+ invocationRequest.setRequestPayload(metadata);
+ }
+ else
+ {
+ requestMap.putAll(metadata);
+ }
}
else
{
@@ -229,36 +242,38 @@
try
{
// call transport on the subclass, get the result to handback
- invocationResponse = invoke(invocationRequest);
+ responseObject = invoke(invocationRequest);
}
catch(Throwable ex)
{
log.debug("Error thrown calling invoke on server invoker.", ex);
- invocationResponse = ex;
- if (checkForExceptionReturn(metadata))
+ if (checkForNoExceptionReturn(metadata))
{
- String sessionId = invocationRequest.getSessionId();
- ServletThrowable st = new ServletThrowable(ex);
- invocationResponse = new InvocationResponse(sessionId, st, true, null);
+ log.trace("Returning error message instead of Exception");
+ response.sendError(500, "Error occurred processing invocation request. ");
+ return retval;
}
else
{
+ responseObject = ex;
isError = true;
}
}
- //Start with response code of 204 (no content), then if is a return from handler, change to 200 (ok)
- int status = 204;
- if(invocationResponse != null)
+ int status = 200;
+ if(responseObject != null)
{
if(isError)
{
- response.sendError(500, "Error occurred processing invocation request. ");
+ status = 500;
+ }
}
else
{
- status = 200;
+ if (!isRemotingUserAgent || "HEAD".equals(request.getMethod()))
+ {
+ status = 204;
}
}
@@ -284,21 +299,25 @@
- // can't set message anymore as is depricated
+ // can't set message anymore as is deprecated
response.setStatus(status);
- if(invocationResponse != null)
+ if (isRemotingUserAgent && !(invocationRequest instanceof CreatedInvocationRequest))
+ {
+ responseObject = new InvocationResponse(invocationRequest.getSessionId(),
+ responseObject, isError, responseMap);
+ }
+
+ if(responseObject != null)
{
- String responseContentType = invocationResponse == null ? requestContentType : WebUtil.getContentType(invocationResponse);
+ String responseContentType = responseObject == null ? requestContentType : WebUtil.getContentType(responseObject);
response.setContentType(responseContentType);
- //int iContentLength = getContentLength(invocationResponse);
- //response.setContentLength(iContentLength);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Marshaller marshaller = getMarshaller();
if (marshaller instanceof VersionedMarshaller)
- ((VersionedMarshaller) marshaller).write(invocationResponse, outputStream, Version.getDefaultVersion());
+ ((VersionedMarshaller) marshaller).write(responseObject, outputStream, Version.getDefaultVersion());
else
- marshaller.write(invocationResponse, outputStream);
+ marshaller.write(responseObject, outputStream);
retval = outputStream.toByteArray();
response.setContentLength(retval.length);
}
@@ -313,13 +332,13 @@
return retval;
}
- private boolean checkForExceptionReturn(Map headers)
+ private boolean checkForNoExceptionReturn(Map headers)
{
boolean flag = false;
if(headers != null)
{
- Object val = headers.get(HTTPMetadataConstants.RETURN_EXCEPTION);
+ Object val = headers.get(HTTPMetadataConstants.DONT_RETURN_EXCEPTION);
if (val != null)
{
if (val instanceof String)
More information about the jboss-cvs-commits
mailing list