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