[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