Author: gmazza Date: Wed Mar 26 18:09:23 2008 New Revision: 641675 URL: http://svn.apache.org/viewvc?rev=641675&view=rev Log: CXF-1490 (http://tinyurl.com/24j2y3) fixed. HTML errors are now output on the response; no more cryptic Woodstox errors.
Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java?rev=641675&r1=641674&r2=641675&view=diff ============================================================================== --- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java (original) +++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java Wed Mar 26 18:09:23 2008 @@ -96,18 +96,29 @@ public static String toString(final InputStream input) throws IOException { - - StringBuilder buf = new StringBuilder(); - final byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; - int n = 0; - n = input.read(buffer); - while (-1 != n) { - buf.append(new String(buffer, 0, n)); - n = input.read(buffer); + return toString(input, DEFAULT_BUFFER_SIZE); + } + + public static String toString(final InputStream input, int bufferSize) + throws IOException { + + int avail = input.available(); + if (avail > bufferSize) { + bufferSize = avail; } - input.close(); - return buf.toString(); + + StringBuilder buf = new StringBuilder(); + final byte[] buffer = new byte[bufferSize]; + int n = 0; + n = input.read(buffer); + while (-1 != n) { + buf.append(new String(buffer, 0, n)); + n = input.read(buffer); + } + input.close(); + return buf.toString(); } + public static String toString(final Reader input) throws IOException { Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties?rev=641675&r1=641674&r2=641675&view=diff ============================================================================== --- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties (original) +++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties Wed Mar 26 18:09:23 2008 @@ -18,7 +18,8 @@ # under the License. # # -STREAM_CREATE_EXC = Could not create XMLStreamReader(encoding {0}). +STREAM_CREATE_EXC = Could not create XMLStreamReader (input was of encoding {0}). +INVALID_HTML_RESPONSETYPE = Response was of unexpected text/html ContentType. Incoming portion of HTML stream: {0} STAX_READ_EXC = Could not read from XMLStreamReader. STAX_WRITE_EXC = Could not write to XMLStreamWriter. NO_OPERATION_ELEMENT=There must be an operation element. Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java?rev=641675&r1=641674&r2=641675&view=diff ============================================================================== --- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java (original) +++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java Wed Mar 26 18:09:23 2008 @@ -19,6 +19,7 @@ package org.apache.cxf.interceptor; +import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; @@ -30,6 +31,7 @@ import org.apache.cxf.common.classloader.ClassLoaderUtils; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; @@ -58,6 +60,20 @@ InputStream is = message.getContent(InputStream.class); assert is != null; + String contentType = (String)message.get(Message.CONTENT_TYPE); + + if (contentType != null && contentType.contains("text/html")) { + String htmlMessage = null; + try { + htmlMessage = IOUtils.toString(is, 500); + } catch (IOException e) { + throw new Fault(new org.apache.cxf.common.i18n.Message("INVALID_HTML_RESPONSETYPE", + LOG, "(none)")); + } + throw new Fault(new org.apache.cxf.common.i18n.Message("INVALID_HTML_RESPONSETYPE", + LOG, (htmlMessage == null || htmlMessage.length() == 0) ? "(none)" : htmlMessage)); + } + String encoding = (String)message.get(Message.ENCODING); XMLStreamReader reader; @@ -66,8 +82,7 @@ } catch (XMLStreamException e) { throw new Fault(new org.apache.cxf.common.i18n.Message("STREAM_CREATE_EXC", LOG, - encoding), - e); + encoding), e); } message.setContent(XMLStreamReader.class, reader);