Author: jbq
Date: Fri Mar  2 03:34:41 2007
New Revision: 513711

URL: http://svn.apache.org/viewvc?view=rev&rev=513711
Log:
* Move new methods write(InputStream) and detectContentType() from WebResponse 
to Response to be reusable in ResourceStreamRequestTarget
* Improve write(InputStream) by merging with the code from 
ResourceStreamRequestTarget

Modified:
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Response.java
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/WebResponse.java
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Response.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Response.java?view=diff&rev=513711&r1=513710&r2=513711
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Response.java 
(original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/Response.java 
Fri Mar  2 03:34:41 2007
@@ -16,11 +16,22 @@
  */
 package wicket;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.SocketException;
+import java.net.URLConnection;
 import java.util.List;
 import java.util.Locale;
 
+import javax.servlet.ServletContext;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import wicket.markup.ComponentTag;
+import wicket.protocol.http.WebApplication;
+import wicket.util.io.Streams;
 import wicket.util.string.AppendingStringBuffer;
 import wicket.util.string.Strings;
 import wicket.util.time.Time;
@@ -36,7 +47,9 @@
  */
 public abstract class Response
 {
-    /** Default encoding of output stream */
+       private static final Log log = LogFactory.getLog(Response.class);
+
+       /** Default encoding of output stream */
     private String defaultEncoding;
 
        /**
@@ -219,6 +232,76 @@
        public abstract void write(final CharSequence string);
 
        /**
+        * Copies the given input stream to the servlet response
+        * <p>
+        * NOTE Content-Length is not set because it would require to buffer the
+        * whole input stream
+        * </p>
+        * 
+        * @param in
+        *            input stream to copy, will be closed after copy
+        */
+       public void write(InputStream in)
+       {
+               OutputStream out = getOutputStream();
+
+               try
+               {
+                       // Copy resource input stream to servlet output stream
+                       Streams.copy(in, out);
+               }
+               catch (Exception e)
+               {
+                       Throwable throwable = e;
+                       boolean ignoreException = false;
+                       while (throwable != null)
+                       {
+                               if (throwable instanceof SocketException)
+                               {
+                                       String message = throwable.getMessage();
+                                       ignoreException = message != null
+                                                       && 
(message.indexOf("Connection reset by peer") != -1 || message
+                                                                       
.indexOf("Software caused connection abort") != -1);
+                               }
+                               else
+                               {
+                                       ignoreException = 
throwable.getClass().getName()
+                                                       
.indexOf("ClientAbortException") >= 0;
+                                       if (ignoreException)
+                                       {
+                                               if (log.isDebugEnabled())
+                                               {
+                                                       log.debug("Socket 
exception ignored for sending Resource "
+                                                                       + 
"response to client (ClientAbort)", e);
+                                               }
+                                               break;
+                                       }
+                               }
+                               throwable = throwable.getCause();
+
+                               if (!ignoreException)
+                               {
+                                       throw new 
WicketRuntimeException("Unable to write response", e);
+                               }
+                       }
+               }
+               finally
+               {
+                       // NOTE: We only close the InputStream. The servlet
+                       // container should close the output stream.
+                       try
+                       {
+                               in.close();
+                               out.flush();
+                       }
+                       catch (IOException e)
+                       {
+                               throw new WicketRuntimeException(e);
+                       }
+               }
+       }
+
+       /**
         * Writes the given string to the Response subclass output destination 
and
         * appends a cr/nl depending on the OS
         * 
@@ -228,5 +311,39 @@
        {
                write(string);
                write(Strings.LINE_SEPARATOR);
+       }
+
+       /**
+        * Sets the Content-Type header with servlet-context-defined 
content-types
+        * (application's web.xml or servlet container's configuration), and 
fall
+        * back to system or JVM-defined (FileNameMap) content types.
+        * 
+        * @param requestCycle
+        * @param uri
+        *            Resource name to be analyzed to detect MIME type
+        * 
+        * @see ServletContext#getMimeType(String)
+        * @see URLConnection#getFileNameMap()
+        */
+       public void detectContentType(RequestCycle requestCycle, String uri)
+       {
+               // Configure response with content type of resource
+               final ServletContext context = 
((WebApplication)requestCycle.getApplication())
+                               .getServletContext();
+               // First look for user defined content-type in web.xml
+               String contentType = context.getMimeType(uri);
+
+               // If not found, fall back to
+               // FileResourceStream.getContentType() that looks into
+               // system or JVM content types
+               if (contentType == null)
+               {
+                       contentType = 
URLConnection.getFileNameMap().getContentTypeFor(uri);
+               }
+
+               if (contentType != null)
+               {
+                       setContentType(contentType + "; charset=" + 
getCharacterEncoding());
+               }
        }
 }

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/WebResponse.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/WebResponse.java?view=diff&rev=513711&r1=513710&r2=513711
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/WebResponse.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/protocol/http/WebResponse.java
 Fri Mar  2 03:34:41 2007
@@ -17,22 +17,17 @@
 package wicket.protocol.http;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.URLConnection;
 import java.util.Locale;
 
-import javax.servlet.ServletContext;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import wicket.RequestCycle;
 import wicket.Response;
 import wicket.WicketRuntimeException;
-import wicket.util.io.Streams;
 import wicket.util.string.AppendingStringBuffer;
 import wicket.util.string.Strings;
 import wicket.util.time.Time;
@@ -381,75 +376,5 @@
        public void setAjax(boolean ajax)
        {
                this.ajax = ajax;
-       }
-
-       /**
-        * Copies the given input stream to the servlet response
-        * <p>
-        * NOTE Content-Length is not set because it would require to buffer the
-        * whole input stream
-        * </p>
-        * 
-        * @param in
-        *            input stream to copy, will be closed after copy
-        */
-       public void write(InputStream in)
-       {
-               try
-               {
-                       // Copy resource input stream to servlet output stream
-                       Streams.copy(in, 
getHttpServletResponse().getOutputStream());
-               }
-               catch (Exception e)
-               {
-                       throw new WicketRuntimeException(e);
-               }
-               finally
-               {
-                       // NOTE: We only close the InputStream. The servlet
-                       // container should close the output stream.
-                       try
-                       {
-                               in.close();
-                       }
-                       catch (IOException e)
-                       {
-                               throw new WicketRuntimeException(e);
-                       }
-               }
-       }
-
-       /**
-        * Sets the Content-Type header with servlet-context-defined 
content-types
-        * (application's web.xml or servlet container's configuration), and 
fall
-        * back to system or JVM-defined (FileNameMap) content types.
-        * 
-        * @param requestCycle
-        * @param uri
-        *            Resource name to be analyzed to detect MIME type
-        * 
-        * @see ServletContext#getMimeType(String)
-        * @see URLConnection#getFileNameMap()
-        */
-       public void detectContentType(RequestCycle requestCycle, String uri)
-       {
-               // Configure response with content type of resource
-               final ServletContext context = 
((WebApplication)requestCycle.getApplication())
-                               .getServletContext();
-               // First look for user defined content-type in web.xml
-               String contentType = context.getMimeType(uri);
-
-               // If not found, fall back to
-               // FileResourceStream.getContentType() that looks into
-               // system or JVM content types
-               if (contentType == null)
-               {
-                       contentType = 
URLConnection.getFileNameMap().getContentTypeFor(uri);
-               }
-
-               if (contentType != null)
-               {
-                       setContentType(contentType);
-               }
        }
 }

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java?view=diff&rev=513711&r1=513710&r2=513711
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/request/target/resource/ResourceStreamRequestTarget.java
 Fri Mar  2 03:34:41 2007
@@ -16,9 +16,6 @@
  */
 package wicket.request.target.resource;
 
-import java.io.OutputStream;
-import java.net.SocketException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -27,8 +24,8 @@
 import wicket.Response;
 import wicket.WicketRuntimeException;
 import wicket.protocol.http.WebResponse;
-import wicket.util.io.Streams;
 import wicket.util.resource.IResourceStream;
+import wicket.util.resource.ResourceStreamNotFoundException;
 
 /**
  * Request target that responds by sending it's resources stream.
@@ -163,54 +160,13 @@
 
                configure(response, resourceStream);
 
-               // Respond with resource
                try
                {
-                       final OutputStream out = response.getOutputStream();
-                       try
-                       {
-                               Streams.copy(resourceStream.getInputStream(), 
out);
-                       }
-                       finally
-                       {
-                               resourceStream.close();
-                               out.flush();
-                       }
+                       response.write(resourceStream.getInputStream());
                }
-               catch (Exception e)
+               catch (ResourceStreamNotFoundException e)
                {
-                       Throwable throwable = e;
-                       boolean ignoreException = false;
-                       while (throwable != null)
-                       {
-                               if (throwable instanceof SocketException)
-                               {
-                                       String message = throwable.getMessage();
-                                       ignoreException = message != null
-                                                       && 
(message.indexOf("Connection reset by peer") != -1 || message
-                                                                       
.indexOf("Software caused connection abort") != -1);
-                               }
-                               else
-                               {
-                                       ignoreException = 
throwable.getClass().getName()
-                                                       
.indexOf("ClientAbortException") >= 0;
-                                       if (ignoreException)
-                                       {
-                                               if (log.isDebugEnabled())
-                                               {
-                                                       log.debug("Socket 
exception ignored for sending Resource "
-                                                                       + 
"response to client (ClientAbort)", e);
-                                               }
-                                               break;
-                                       }
-                               }
-                               throwable = throwable.getCause();
-                       }
-                       if (!ignoreException)
-                       {
-                               throw new WicketRuntimeException("Unable to 
render resource stream "
-                                               + resourceStream, e);
-                       }
+                       throw new WicketRuntimeException(e);
                }
        }
 


Reply via email to