From 2183a4243c14713ab12d9940d6d32e77aaffd56b Mon Sep 17 00:00:00 2001 From: jfarcand Date: Fri, 8 Nov 2013 12:16:12 -0500 Subject: [PATCH] Fix for #1367 --- .../org/atmosphere/cpr/AtmosphereRequest.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereRequest.java b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereRequest.java index 401d807be76..80bd58d66b3 100644 --- a/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereRequest.java +++ b/modules/cpr/src/main/java/org/atmosphere/cpr/AtmosphereRequest.java @@ -312,7 +312,28 @@ public String getHeader(String s, boolean checkCase) { } if (s.startsWith(X_ATMOSPHERE) && isNotNoOps()) { - name = (String) b.request.getAttribute(s); + // Craziness with Struts 2 who wraps String attribute as BigDecimal + // https://github.com/Atmosphere/atmosphere/issues/1367 + Object o = b.request.getAttribute(s); + if (o == null || String.class.isAssignableFrom(o.getClass())) { + name = String.class.cast(o); + } else { + try { + if (HttpServletRequestWrapper.class.isAssignableFrom(b.request.getClass())) { + HttpServletRequest hsr = HttpServletRequestWrapper.class.cast(b.request); + while (hsr instanceof HttpServletRequestWrapper) { + hsr = (HttpServletRequest) ((HttpServletRequestWrapper) hsr).getRequest(); + o = hsr.getAttribute(s); + if (o == null || String.class.isAssignableFrom(o.getClass())) { + name = String.class.cast(o); + break; + } + } + } + } catch (Exception ex) { + logger.warn("", ex); + } + } } }