Repository: tomee
Updated Branches:
  refs/heads/master 065171fcb -> a6e42f4f5


trying to not trigger anymore parameter parsing cause of cdi during a http 
request


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/28b3215d
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/28b3215d
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/28b3215d

Branch: refs/heads/master
Commit: 28b3215d2021d48e7470ccd892a317518473ef9f
Parents: 065171f
Author: Romain Manni-Bucau <[email protected]>
Authored: Wed Apr 1 19:54:37 2015 +0200
Committer: Romain Manni-Bucau <[email protected]>
Committed: Wed Apr 1 19:54:37 2015 +0200

----------------------------------------------------------------------
 .../openejb/cdi/CdiAppContextsService.java      | 36 +++++++++++++++-----
 1 file changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/28b3215d/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
 
b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
index 7008ec2..bda7af3 100644
--- 
a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
+++ 
b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
@@ -68,6 +68,8 @@ public class CdiAppContextsService extends 
AbstractContextsService implements Co
 
     private static final Logger logger = 
Logger.getInstance(LogCategory.OPENEJB.createChild("cdi"), 
CdiAppContextsService.class);
 
+    private static final String CID = "cid";
+
     private final ThreadLocal<ServletRequestContext> requestContext = new 
ThreadLocal<>();
 
     private final ThreadLocal<SessionContext> sessionContext = new 
ThreadLocal<>();
@@ -364,7 +366,7 @@ public class CdiAppContextsService extends 
AbstractContextsService implements Co
                 //Re-initialize thread local for session
                 final HttpSession session = request.getSession(false);
 
-                final String cid = conversationService != null ? 
request.getParameter("cid") : null;
+                final String cid = conversationService != null ? 
getCid(request) : null;
                 if (session != null) {
                     initSessionContext(session);
                     if (autoConversationCheck && conversationService != null 
&& !isConversationSkipped(request)) {
@@ -391,6 +393,26 @@ public class CdiAppContextsService extends 
AbstractContextsService implements Co
         }
     }
 
+    public static String getCid(final HttpServletRequest req) {
+        return getFromQuery(CID, req.getQueryString());
+    }
+
+    public static String getFromQuery(final String name, final String q) {
+        final int cid = q == null ? -1 : q.indexOf(name + "=");
+        if (cid < 0) {
+            return null;
+        }
+        int end = q.indexOf("&", cid);
+        final int end2 = q.indexOf("#", cid);
+        if (end2 > 0 && end2 < end) {
+            end = end2;
+        }
+        if (end < 0) {
+            end = q.length();
+        }
+        return q.substring(cid + name.length() + 1, end);
+    }
+
     public boolean isAutoConversationCheck() {
         return autoConversationCheck;
     }
@@ -400,7 +422,7 @@ public class CdiAppContextsService extends 
AbstractContextsService implements Co
         if (rc != null && rc.getServletRequest() != null && 
conversationService != null) {
             final HttpSession session = 
rc.getServletRequest().getSession(false);
             if (session != null) {
-                final String cid = rc.getServletRequest().getParameter("cid");
+                final String cid = getFromQuery(CID, 
rc.getServletRequest().getQueryString());
                 if (cid != null) {
                     final ConversationManager conversationManager = 
webBeansContext.getConversationManager();
                     final ConversationImpl c = 
conversationManager.getPropogatedConversation(cid, session.getId());
@@ -585,11 +607,6 @@ public class CdiAppContextsService extends 
AbstractContextsService implements Co
         singletonContext.destroy();
     }
 
-    /**
-     * Initialize conversation context.
-     *
-     * @param context context
-     */
     private ConversationContext initConversationContext(final Object request) {
         if (conversationService == null) {
             return null;
@@ -697,7 +714,8 @@ public class CdiAppContextsService extends 
AbstractContextsService implements Co
     }
 
     private boolean isConversationSkipped(final HttpServletRequest 
servletRequest) {
-        return 
"none".equals(servletRequest.getParameter("conversationPropagation")) || 
"true".equals(servletRequest.getParameter("nocid"));
+        final String queryString = servletRequest.getQueryString();
+        return "none".equals(getFromQuery("conversationPropagation", 
queryString)) || "true".equals(getFromQuery("nocid", queryString));
     }
 
     private boolean isTimeout() {
@@ -775,7 +793,7 @@ public class CdiAppContextsService extends 
AbstractContextsService implements Co
     public String getHttpParameter(final String name) {
         final ServletRequestContext req = getRequestContext(false);
         if (req != null && req.getServletRequest() != null) {
-            return req.getServletRequest().getParameter(name);
+            return getFromQuery(name, 
req.getServletRequest().getQueryString());
         }
         return null;
     }

Reply via email to