You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2011/11/07 00:03:01 UTC
svn commit: r1198584 - in
/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs:
provider/FormEncodingProvider.java provider/Messages.properties
provider/RequestDispatcherProvider.java utils/FormUtils.java
Author: sergeyb
Date: Sun Nov 6 23:03:00 2011
New Revision: 1198584
URL: http://svn.apache.org/viewvc?rev=1198584&view=rev
Log:
[CXF-3894] RequestDispatcherProvider and FormUtils logging improvements
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/Messages.properties
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/FormUtils.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java?rev=1198584&r1=1198583&r2=1198584&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java Sun Nov 6 23:03:00 2011
@@ -24,9 +24,6 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.Encoded;
@@ -202,22 +199,9 @@ public class FormEncodingProvider implem
(MultivaluedMap<String, String>)(obj instanceof Form ? ((Form)obj).getData() : obj);
boolean encoded = keepEncoded(anns);
- String encoding = HttpUtils.getSetEncoding(mt, headers, "UTF-8");
+ String enc = HttpUtils.getSetEncoding(mt, headers, "UTF-8");
- for (Iterator<Map.Entry<String, List<String>>> it = map.entrySet().iterator(); it.hasNext();) {
- Map.Entry<String, List<String>> entry = it.next();
- for (Iterator<String> entryIterator = entry.getValue().iterator(); entryIterator.hasNext();) {
- String value = entryIterator.next();
- os.write(entry.getKey().getBytes(encoding));
- os.write('=');
- String data = encoded ? value : HttpUtils.urlEncode(value);
- os.write(data.getBytes(encoding));
- if (entryIterator.hasNext() || it.hasNext()) {
- os.write('&');
- }
- }
-
- }
+ FormUtils.writeMapToOutputStream(map, os, enc, encoded);
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/Messages.properties?rev=1198584&r1=1198583&r2=1198584&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/Messages.properties (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/Messages.properties Sun Nov 6 23:03:00 2011
@@ -21,5 +21,6 @@
JAXB_EXCEPTION=JAXBException occurred : {0}
NO_COLLECTION_ROOT=No collection name is provided
NO_MSG_WRITER =.No message body writer found for class : {0}.
+RESPONSE_REDIRECTED_TO=Setting an instance of \"{0}\" as HttpServletRequest attribute \"{1}\" and redirecting the response to \"{2}\".
EMPTY_BODY=Message body is empty
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java?rev=1198584&r1=1198583&r2=1198584&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java Sun Nov 6 23:03:00 2011
@@ -27,6 +27,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
+import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
@@ -76,6 +77,7 @@ public class RequestDispatcherProvider e
private String dispatcherName;
private String servletPath;
private boolean saveParametersAsAttributes;
+ private boolean logRedirects;
@Context
private MessageContext mc;
@@ -114,12 +116,14 @@ public class RequestDispatcherProvider e
HttpServletRequestFilter servletRequest =
new HttpServletRequestFilter(mc.getHttpServletRequest(), path,
theServletPath, saveParametersAsAttributes);
+ String attributeName = getBeanName(o);
if (REQUEST_SCOPE.equals(scope)) {
- servletRequest.setAttribute(getBeanName(o), o);
+ servletRequest.setAttribute(attributeName, o);
} else if (SESSION_SCOPE.equals(scope)) {
- servletRequest.getSession(true).setAttribute(getBeanName(o), o);
+ servletRequest.getSession(true).setAttribute(attributeName, o);
}
setRequestParameters(servletRequest);
+ logRedirection(path, attributeName, o);
rd.forward(servletRequest, mc.getHttpServletResponse());
} catch (Throwable ex) {
mc.put(AbstractHTTPDestination.REQUEST_REDIRECTED, Boolean.FALSE);
@@ -128,6 +132,16 @@ public class RequestDispatcherProvider e
}
}
+ private void logRedirection(String path, String attributeName, Object o) {
+ Level level = logRedirects ? Level.INFO : Level.FINE;
+ if (LOG.isLoggable(level)) {
+ String message =
+ new org.apache.cxf.common.i18n.Message("RESPONSE_REDIRECTED_TO",
+ BUNDLE, o.getClass().getName(), attributeName, path).toString();
+ LOG.log(level, message);
+ }
+ }
+
private String getResourcePath(String clsName) {
String clsResourcePath = classResources.get(clsName);
if (clsResourcePath != null) {
@@ -199,6 +213,10 @@ public class RequestDispatcherProvider e
public void setBeanName(String beanName) {
this.beanName = beanName;
}
+
+ public void setLogRedirects(String value) {
+ this.logRedirects = Boolean.valueOf(value);
+ }
protected String getBeanName(Object bean) {
if (beanName != null) {
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/FormUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/FormUtils.java?rev=1198584&r1=1198583&r2=1198584&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/FormUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/FormUtils.java Sun Nov 6 23:03:00 2011
@@ -22,24 +22,31 @@ package org.apache.cxf.jaxrs.utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.util.Arrays;
import java.util.Enumeration;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
+import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;
import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
+import org.apache.cxf.phase.PhaseInterceptorChain;
public final class FormUtils {
-
public static final String FORM_PARAM_MAP = "org.apache.cxf.form_data";
+
+ private static final Logger LOG = LogUtils.getL7dLogger(FormUtils.class);
private static final String MULTIPART_FORM_DATA_TYPE = "form-data";
private FormUtils() {
@@ -100,6 +107,36 @@ public final class FormUtils {
String[] values = request.getParameterValues(paramName);
params.put(HttpUtils.urlDecode(paramName), Arrays.asList(values));
}
+ String chain = PhaseInterceptorChain.getCurrentMessage().getInterceptorChain().toString();
+ if (chain.contains(LoggingInInterceptor.class.getSimpleName())) {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ try {
+ writeMapToOutputStream(params, bos, enc, false);
+ LOG.info(bos.toString(enc));
+ } catch (IOException ex) {
+ // ignore
+ }
+ }
+ }
+ }
+
+ public static void writeMapToOutputStream(MultivaluedMap<String, String> map,
+ OutputStream os,
+ String enc,
+ boolean encoded) throws IOException {
+ for (Iterator<Map.Entry<String, List<String>>> it = map.entrySet().iterator(); it.hasNext();) {
+ Map.Entry<String, List<String>> entry = it.next();
+ for (Iterator<String> entryIterator = entry.getValue().iterator(); entryIterator.hasNext();) {
+ String value = entryIterator.next();
+ os.write(entry.getKey().getBytes(enc));
+ os.write('=');
+ String data = encoded ? value : HttpUtils.urlEncode(value);
+ os.write(data.getBytes(enc));
+ if (entryIterator.hasNext() || it.hasNext()) {
+ os.write('&');
+ }
+ }
+
}
}