dev@javaserverfaces.java.net

[REVIEW] Backport of issues 85, 145, 151

From: Roger Kitain <Roger.Kitain_at_Sun.COM>
Date: Sun, 06 Nov 2005 16:22:45 -0500

Backport of issues:

https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=85
https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=145
https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=151

to JSF_1_1_ROLLING branch



<< ADD DESCRIPTION HERE >>


SECTION: Modified Files
----------------------------
M jsf-ri/src/com/sun/faces/application/ApplicationImpl.java
M jsf-ri/src/com/sun/faces/renderkit/RenderKitImpl.java
M jsf-ri/src/com/sun/faces/renderkit/ResponseStateManagerImpl.java
M jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java


SECTION: Diffs
----------------------------
Index: jsf-ri/src/com/sun/faces/application/ApplicationImpl.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/application/ApplicationImpl.java,v
retrieving revision 1.52
diff -u -r1.52 ApplicationImpl.java
--- jsf-ri/src/com/sun/faces/application/ApplicationImpl.java 15 Jul 2004 18:08:31 -0000 1.52
+++ jsf-ri/src/com/sun/faces/application/ApplicationImpl.java 6 Nov 2005 21:36:55 -0000
@@ -489,7 +489,7 @@
         Class[] interfaces = targetClass.getInterfaces();
         if (interfaces != null) {
             for (int i = 0; i < interfaces.length; i++) {
- returnVal = createConverter(interfaces[i]);
+ returnVal = createConverterBasedOnClass(interfaces[i]);
                 if (returnVal != null) {
                     if (log.isTraceEnabled()) {
                         log.trace("Created converter of type " +
@@ -503,7 +503,7 @@
         //Search for converters registered to superclasses of targetClass
         Class superclass = targetClass.getSuperclass();
         if (superclass != null) {
- returnVal = createConverter(superclass);
+ returnVal = createConverterBasedOnClass(superclass);
             if (returnVal != null) {
                 if (log.isTraceEnabled()) {
                     log.trace("Created converter of type " +
@@ -515,6 +515,50 @@
 
         return returnVal;
     }
+
+ protected Converter createConverterBasedOnClass(Class targetClass) {
+
+ Converter returnVal = (Converter) newThing(targetClass,
+ converterTypeMap);
+ if (returnVal != null) {
+ if (log.isTraceEnabled()) {
+ log.trace("Created converter of type " +
+ returnVal.getClass().getName());
+ }
+ return returnVal;
+ }
+
+ //Search for converters registered to interfaces implemented by
+ //targetClass
+ Class[] interfaces = targetClass.getInterfaces();
+ if (interfaces != null) {
+ for (int i = 0; i < interfaces.length; i++) {
+ returnVal = createConverterBasedOnClass(interfaces[i]);
+ if (returnVal != null) {
+ if (log.isTraceEnabled()) {
+ log.trace("Created converter of type " +
+ returnVal.getClass().getName());
+ }
+ return returnVal;
+ }
+ }
+ }
+
+ //Search for converters registered to superclasses of targetClass
+ Class superclass = targetClass.getSuperclass();
+ if (superclass != null) {
+ returnVal = createConverterBasedOnClass(superclass);
+ if (returnVal != null) {
+ if (log.isTraceEnabled()) {
+ log.trace("Created converter of type " +
+ returnVal.getClass().getName());
+ }
+ return returnVal;
+ }
+ }
+ return returnVal;
+ }
+
 
 
     public Iterator getConverterIds() {
Index: jsf-ri/src/com/sun/faces/renderkit/RenderKitImpl.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/renderkit/RenderKitImpl.java,v
retrieving revision 1.22
diff -u -r1.22 RenderKitImpl.java
--- jsf-ri/src/com/sun/faces/renderkit/RenderKitImpl.java 30 Jul 2004 16:11:57 -0000 1.22
+++ jsf-ri/src/com/sun/faces/renderkit/RenderKitImpl.java 6 Nov 2005 21:36:55 -0000
@@ -48,6 +48,7 @@
 //
     // used for ResponseWriter creation;
     private static String HTML_CONTENT_TYPE = "text/html";
+ private static String ALL_MEDIA = "*/*";
     private static String CHAR_ENCODING = "ISO-8859-1";
 //
 // Ivars used during actual client lifetime
@@ -158,6 +159,12 @@
                     Util.CONTENT_TYPE_ERROR_MESSAGE_ID));
             }
         }
+
+ if (null == contentTypeList ||
+ contentTypeList.equals(ALL_MEDIA)) {
+ contentType = HTML_CONTENT_TYPE;
+ }
+
         if (characterEncoding == null) {
             characterEncoding = CHAR_ENCODING;
         }
Index: jsf-ri/src/com/sun/faces/renderkit/ResponseStateManagerImpl.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/renderkit/ResponseStateManagerImpl.java,v
retrieving revision 1.13.24.1
diff -u -r1.13.24.1 ResponseStateManagerImpl.java
--- jsf-ri/src/com/sun/faces/renderkit/ResponseStateManagerImpl.java 29 Aug 2005 22:49:33 -0000 1.13.24.1
+++ jsf-ri/src/com/sun/faces/renderkit/ResponseStateManagerImpl.java 6 Nov 2005 21:36:55 -0000
@@ -15,6 +15,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import javax.faces.FacesException;
 import javax.faces.application.StateManager.SerializedView;
 import javax.faces.context.FacesContext;
 import javax.faces.render.ResponseStateManager;
@@ -136,10 +137,13 @@
             ois.close();
         } catch (java.io.OptionalDataException ode) {
             log.error(ode.getMessage(), ode);
+ throw new FacesException(ode);
         } catch (java.lang.ClassNotFoundException cnfe) {
             log.error(cnfe.getMessage(), cnfe);
+ throw new FacesException(cnfe);
         } catch (java.io.IOException iox) {
             log.error(iox.getMessage(), iox);
+ throw new FacesException(iox);
         }
         return structure;
     }
Index: jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java,v
retrieving revision 1.16
diff -u -r1.16 TestRenderKit.java
--- jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java 26 Feb 2004 20:34:36 -0000 1.16
+++ jsf-ri/test/com/sun/faces/renderkit/TestRenderKit.java 6 Nov 2005 21:36:57 -0000
@@ -19,14 +19,18 @@
 
 import javax.faces.FactoryFinder;
 import javax.faces.context.ResponseStream;
+import javax.faces.context.ResponseWriter;
 import javax.faces.render.RenderKit;
 import javax.faces.render.RenderKitFactory;
 import javax.faces.render.Renderer;
 
+
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.Writer;
 
+import org.apache.cactus.WebRequest;
+
 /**
  * <B>TestRenderKit</B> is a class ...
  * <p/>
@@ -222,5 +226,45 @@
         } catch (IllegalArgumentException iae) {
         }
     }
+
+ public void beginCreateResponseWriterAllMedia(WebRequest theRequest) {
+ theRequest.addHeader("Accept", "*/*");
+ }
+
+ public void testCreateResponseWriterAllMedia() throws Exception {
+ RenderKitFactory renderKitFactory = (RenderKitFactory)
+ FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ RenderKit renderKit = renderKitFactory.getRenderKit(getFacesContext(),
+ RenderKitFactory.HTML_BASIC_RENDER_KIT);
+ Writer wrappedWriter = new Writer() {
+ public void close() throws IOException {
+ }
+ public void flush() throws IOException {
+ }
+ public void write(char cbuf) throws IOException {
+ }
+ public void write(char[] cbuf, int off,
+ int len) throws IOException {
+ }
+ public void write(int c) throws IOException {
+ }
+ public void write(String str) throws IOException {
+ }
+ public void write(String str, int off,
+ int len) throws IOException {
+ }
+ };
+
+ ResponseWriter writer = null;
+
+ // see that the proper content type is picked up based on the
+ // accept header
+ writer = renderKit.createResponseWriter(wrappedWriter, null, "ISO-8859-1");
+ assertEquals(writer.getContentType(), "text/html");
+
+ }
+
+
+
 
 } // end of class TestRenderKit