ICEfaces
  1. ICEfaces
  2. ICE-10796

Server Exceptions when opening a New Window in IE 11

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-3.3.0.GA_P03
    • Fix Version/s: 4.1, EE-3.3.0.GA_P04
    • Component/s: Bridge
    • Labels:
      None
    • Environment:
      IE 11
    • Assignee Priority:
      P1
    • Workaround Exists:
      Yes
    • Workaround Description:
      Use "New Tab" and manually enter the URL to the same application.

      Description

      The original problem was captured in ICE-10753 but since that JIRA was intended for a different issue, we've opened this case to separate the two. Here's the original details captured by QA:

      --------

      EE 3 Trunk Build 557/ FedEx P03 Build 09:
      auctionMonitor works fine on IE11 only when the application is accessed in 2 tabs from the same IE11 window, or when the second IE11 window is opened in a new session (choosing File > New session from the browser menu).
      If the application is opened in a second window using Ctrl-N (not a new session), then server-side errors occur, screen shot (IE11-errors.PNG) attached. On my PC the errors occur most of the time immediately after opening the application in the second IE11 window with Ctrl-N. On the 10.18.39.107 Test PC, the errors occur either when trying to place a bid from the second window, or after placing a bid from the second window and then leaving both windows open for 1-2 minutes.
      Server errors:
      Sep 02, 2015 9:43:26 AM org.icepush.servlet.EnvironmentAdaptingServlet <init>
      INFO: Adapting to Servlet 3.0 AsyncContext environment
      Sep 02, 2015 9:43:26 AM org.icepush.servlet.AsyncAdaptingServlet <init>
      INFO: Using Servlet 3.0 AsyncContext
      Sep 02, 2015 9:43:26 AM org.icepush.servlet.EnvironmentAdaptingServlet service
      INFO: Falling back to Thread Blocking environment
      Sep 02, 2015 9:44:39 AM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
      SEVERE: Error Rendering View[/auctionMonitor.xhtml]
      java.lang.NullPointerException
      at com.sun.org.apache.xerces.internal.dom.NamedNodeMapImpl.findNamePoint(NamedNodeMapImpl.java:460)
      at com.sun.org.apache.xerces.internal.dom.AttributeMap.internalRemoveNamedItem(AttributeMap.java:285)
      at com.sun.org.apache.xerces.internal.dom.AttributeMap.safeRemoveNamedItem(AttributeMap.java:239)
      at com.sun.org.apache.xerces.internal.dom.ElementImpl.removeAttribute(ElementImpl.java:420)
      at org.icefaces.impl.context.DOMPartialViewContext$2.run(DOMPartialViewContext.java:421)
      at org.icefaces.impl.context.DOMPartialViewContext.domDiff(DOMPartialViewContext.java:402)
      at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:160)
      at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:973)
      at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1819)
      at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:421)
      at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
      at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:286)
      at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
      at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
      at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      at java.lang.Thread.run(Thread.java:744)
      ..............
      Sep 02, 2015 9:44:45 AM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
      SEVERE: Error Rendering View[/auctionMonitor.xhtml]
      java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
      at java.util.ArrayList.rangeCheck(ArrayList.java:635)
      at java.util.ArrayList.get(ArrayList.java:411)
      at com.sun.org.apache.xerces.internal.dom.AttributeMap.internalRemoveNamedItem(AttributeMap.java:295)
      at com.sun.org.apache.xerces.internal.dom.AttributeMap.safeRemoveNamedItem(AttributeMap.java:239)
      at com.sun.org.apache.xerces.internal.dom.ElementImpl.removeAttribute(ElementImpl.java:420)
      at org.icefaces.impl.context.DOMPartialViewContext$2.run(DOMPartialViewContext.java:421)
      at org.icefaces.impl.context.DOMPartialViewContext.domDiff(DOMPartialViewContext.java:404)
      at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:160)
      at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:973)
      at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1819)
      at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:421)
      at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125)
      at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:286)
      at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
      at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
      at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      at java.lang.Thread.run(Thread.java:744)

        Activity

        Hide
        Deryk Sinotte added a comment -

        Additional QA comments:

        From 03/Sep/15: There are no errors or clock lag issues with auction application from ICEfaces4 trunk r45937 on IE11 when using 2 tabs, or separate windows with/without new session.

        From 04/Sep/15: The auction application from FedEx P03 Build 14 fails also on IE11, if opening the second window in the same session with Ctrl-N: bids placed on one window are not rendered on the other window.
        I did not see any server error popups on the pages, only the server error in tomcat terminal log:
        INFO: Falling back to Thread Blocking environment
        Sep 04, 2015 9:46:59 AM org.icefaces.impl.util.DOMUtils nodeDiff
        SEVERE: Diff propagated to root but no ID set [html: null]
        Also, no issues if opening the application in 2 tabs of the same IE11 window, or if opening a second window in a new session.

        Show
        Deryk Sinotte added a comment - Additional QA comments: From 03/Sep/15: There are no errors or clock lag issues with auction application from ICEfaces4 trunk r45937 on IE11 when using 2 tabs, or separate windows with/without new session. From 04/Sep/15: The auction application from FedEx P03 Build 14 fails also on IE11, if opening the second window in the same session with Ctrl-N: bids placed on one window are not rendered on the other window. I did not see any server error popups on the pages, only the server error in tomcat terminal log: INFO: Falling back to Thread Blocking environment Sep 04, 2015 9:46:59 AM org.icefaces.impl.util.DOMUtils nodeDiff SEVERE: Diff propagated to root but no ID set [html: null] Also, no issues if opening the application in 2 tabs of the same IE11 window, or if opening a second window in a new session.
        Hide
        Deryk Sinotte added a comment -

        I opened up two windows in Firefox and two windows in IE (using the various methods available). I added a filter to the AuctionMonitor app to see what cookies and parameters were being sent by the two different windows. First is the output when the clock update is pushed to the two windows in Firefox:

        DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf[1441742482038]
        **  COOKIES
            JSESSIONID, 369109967DC9C4B8427CB1EFBA3EBA70
            GUEST_LANGUAGE_ID, en_US
            ice.push.browser, 1iebq9vam
        **  PARAMETERS
            ice.submit.type, [ice.push]
            ice.window, [qqiebs7bik]
            ice.view, [vrb2z3t2]
            javax.faces.ViewState, [-4349345986147320240:4575075250937462385]
            javax.faces.partial.render, [@all]
            javax.faces.source, [vrb2z3t2-retrieve-update]
            javax.faces.partial.ajax, [true]
            javax.faces.partial.execute, [vrb2z3t2-retrieve-update vrb2z3t2-retrieve-update]
            vrb2z3t2-retrieve-update, [vrb2z3t2-retrieve-update]
        
        DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf[1441742482041]
        **  COOKIES
            JSESSIONID, 369109967DC9C4B8427CB1EFBA3EBA70
            GUEST_LANGUAGE_ID, en_US
            ice.push.browser, 1iebq9vam
        **  PARAMETERS
            ice.submit.type, [ice.push]
            ice.window, [qqiebs6lzz]
            ice.view, [vrb2z3t1]
            javax.faces.ViewState, [-4280845666741157244:6937395576449765758]
            javax.faces.partial.render, [@all]
            javax.faces.source, [vrb2z3t1-retrieve-update]
            vrb2z3t1-retrieve-update, [vrb2z3t1-retrieve-update]
            javax.faces.partial.ajax, [true]
            javax.faces.partial.execute, [vrb2z3t1-retrieve-update vrb2z3t1-retrieve-update]
        

        A nice, clean separation of concerns. Same ice.push.browser identifier with separate ice.view identifiers.

        When running in IE, you can replicate the issue by opening up a window to the app (/auctionmonitor) and then opening up a second window using either "New Window" or "Duplicate Tab" from the IE menu. The problem does not manifest if you use "New Tab" and then navigate to the app by supply the URL manually.

        The server-side exceptions are actually quite varied but are always associated with the DOM diffing. I've seen these as well as some others:

        java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        
        Sep 08, 2015 10:33:41 AM org.icefaces.impl.util.DOMUtils nodeDiff
        SEVERE: Diff propagated to root but no ID set [html: null]
        
        Sep 08, 2015 10:35:26 AM org.icefaces.impl.util.DOMUtils nodeDiff
        SEVERE: Pruning failure
        java.lang.NullPointerException
        

        This suggests some kind of threading/timing issue. Checking the filter for the output from the two IE windows (with the second one opened up using "New Window"), you get:

        DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf;jsessionid=74C0098D7CB557CE84F96D8CCAC79742[1441742942158]
        **  COOKIES
            JSESSIONID, 74C0098D7CB557CE84F96D8CCAC79742
            ice.push.browser, 1iebsi0vr
        **  PARAMETERS
            vrb2z3t6-retrieve-update, [vrb2z3t6-retrieve-update]
            ice.submit.type, [ice.push]
            ice.window, [qqiebsi0vq]
            ice.view, [vrb2z3t6]
            javax.faces.ViewState, [8077197182394121079:-8290567127073823662]
            javax.faces.partial.render, [@all]
            javax.faces.source, [vrb2z3t6-retrieve-update]
            javax.faces.partial.ajax, [true]
            javax.faces.partial.execute, [vrb2z3t6-retrieve-update vrb2z3t6-retrieve-update]
            
        DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf[1441742952216]
        **  COOKIES
            JSESSIONID, 74C0098D7CB557CE84F96D8CCAC79742
            ice.push.browser, 1iebsi0vr
        **  PARAMETERS
            vrb2z3t6-retrieve-update, [vrb2z3t6-retrieve-update]
            ice.submit.type, [ice.push]
            ice.window, [qqiebsi0vq]
            ice.view, [vrb2z3t6]
            javax.faces.ViewState, [8077197182394121079:-8290567127073823662]
            javax.faces.partial.render, [@all]
            javax.faces.source, [vrb2z3t6-retrieve-update]
            javax.faces.partial.ajax, [true]
            javax.faces.partial.execute, [vrb2z3t6-retrieve-update vrb2z3t6-retrieve-update]
        

        The problem becomes obvious. Not only is the ice.push.browser identifier the same (which is good), the ice.view is also the same (not so good). What we have now is two separate windows acting as if they are the same view. This could lead to a host of issues when both requests are trying to update the DOM.

        Looking at the initial request from opening of the second window, it appears that it's just using everything from the cache - basically a copy of the initial window - which includes all the parameters and such.

        Show
        Deryk Sinotte added a comment - I opened up two windows in Firefox and two windows in IE (using the various methods available). I added a filter to the AuctionMonitor app to see what cookies and parameters were being sent by the two different windows. First is the output when the clock update is pushed to the two windows in Firefox: DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf[1441742482038] ** COOKIES JSESSIONID, 369109967DC9C4B8427CB1EFBA3EBA70 GUEST_LANGUAGE_ID, en_US ice.push.browser, 1iebq9vam ** PARAMETERS ice.submit.type, [ice.push] ice.window, [qqiebs7bik] ice.view, [vrb2z3t2] javax.faces.ViewState, [-4349345986147320240:4575075250937462385] javax.faces.partial.render, [@all] javax.faces.source, [vrb2z3t2-retrieve-update] javax.faces.partial.ajax, [true] javax.faces.partial.execute, [vrb2z3t2-retrieve-update vrb2z3t2-retrieve-update] vrb2z3t2-retrieve-update, [vrb2z3t2-retrieve-update] DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf[1441742482041] ** COOKIES JSESSIONID, 369109967DC9C4B8427CB1EFBA3EBA70 GUEST_LANGUAGE_ID, en_US ice.push.browser, 1iebq9vam ** PARAMETERS ice.submit.type, [ice.push] ice.window, [qqiebs6lzz] ice.view, [vrb2z3t1] javax.faces.ViewState, [-4280845666741157244:6937395576449765758] javax.faces.partial.render, [@all] javax.faces.source, [vrb2z3t1-retrieve-update] vrb2z3t1-retrieve-update, [vrb2z3t1-retrieve-update] javax.faces.partial.ajax, [true] javax.faces.partial.execute, [vrb2z3t1-retrieve-update vrb2z3t1-retrieve-update] A nice, clean separation of concerns. Same ice.push.browser identifier with separate ice.view identifiers. When running in IE, you can replicate the issue by opening up a window to the app (/auctionmonitor) and then opening up a second window using either "New Window" or "Duplicate Tab" from the IE menu. The problem does not manifest if you use "New Tab" and then navigate to the app by supply the URL manually. The server-side exceptions are actually quite varied but are always associated with the DOM diffing. I've seen these as well as some others: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 Sep 08, 2015 10:33:41 AM org.icefaces.impl.util.DOMUtils nodeDiff SEVERE: Diff propagated to root but no ID set [html: null] Sep 08, 2015 10:35:26 AM org.icefaces.impl.util.DOMUtils nodeDiff SEVERE: Pruning failure java.lang.NullPointerException This suggests some kind of threading/timing issue. Checking the filter for the output from the two IE windows (with the second one opened up using "New Window"), you get: DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf;jsessionid=74C0098D7CB557CE84F96D8CCAC79742[1441742942158] ** COOKIES JSESSIONID, 74C0098D7CB557CE84F96D8CCAC79742 ice.push.browser, 1iebsi0vr ** PARAMETERS vrb2z3t6-retrieve-update, [vrb2z3t6-retrieve-update] ice.submit.type, [ice.push] ice.window, [qqiebsi0vq] ice.view, [vrb2z3t6] javax.faces.ViewState, [8077197182394121079:-8290567127073823662] javax.faces.partial.render, [@all] javax.faces.source, [vrb2z3t6-retrieve-update] javax.faces.partial.ajax, [true] javax.faces.partial.execute, [vrb2z3t6-retrieve-update vrb2z3t6-retrieve-update] DebugFilter.doFilter: request URI -> /auctionMonitor/auctionMonitor.jsf[1441742952216] ** COOKIES JSESSIONID, 74C0098D7CB557CE84F96D8CCAC79742 ice.push.browser, 1iebsi0vr ** PARAMETERS vrb2z3t6-retrieve-update, [vrb2z3t6-retrieve-update] ice.submit.type, [ice.push] ice.window, [qqiebsi0vq] ice.view, [vrb2z3t6] javax.faces.ViewState, [8077197182394121079:-8290567127073823662] javax.faces.partial.render, [@all] javax.faces.source, [vrb2z3t6-retrieve-update] javax.faces.partial.ajax, [true] javax.faces.partial.execute, [vrb2z3t6-retrieve-update vrb2z3t6-retrieve-update] The problem becomes obvious. Not only is the ice.push.browser identifier the same (which is good), the ice.view is also the same (not so good). What we have now is two separate windows acting as if they are the same view. This could lead to a host of issues when both requests are trying to update the DOM. Looking at the initial request from opening of the second window, it appears that it's just using everything from the cache - basically a copy of the initial window - which includes all the parameters and such.
        Hide
        Mircea Toma added a comment -

        Send caching headers with the page load responses to force IE to load the content of the page (instead of using a cached version) when "Duplicate Tab" option is used.

        Show
        Mircea Toma added a comment - Send caching headers with the page load responses to force IE to load the content of the page (instead of using a cached version) when "Duplicate Tab" option is used.
        Hide
        Liana Munroe added a comment -

        Tested with ICEfaces EE-3.3.0 maintenance branch r45959 using auctionMonitor and ICEfaces 4 trunk using auction. Not able to reproduce server error using methods suggested in the description or comments.

        Show
        Liana Munroe added a comment - Tested with ICEfaces EE-3.3.0 maintenance branch r45959 using auctionMonitor and ICEfaces 4 trunk using auction. Not able to reproduce server error using methods suggested in the description or comments.

          People

          • Assignee:
            Mircea Toma
            Reporter:
            Deryk Sinotte
          • Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: