Details
-
Type:
Bug
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: EE-3.3.0.GA
-
Fix Version/s: EE-3.3.0.GA_P01, 4.0.BETA, 4.0
-
Component/s: Framework, ICE-Components
-
Labels:None
-
Environment:All
-
Salesforce Case Reference:
-
Workaround Exists:Yes
-
Workaround Description:Either include the required compat jars (icefaces-ee-compat.jar, commons-*.jar) or remove the compat namespace from the page.
Description
When declaring the ICEfaces compat component namespace in the xhtml page but not including the required Jar files the following error is thrown in EE 3.3.0 (The same setup is not an issue with EE 3.2.0):
java.lang.RuntimeException: Cannot clone document
at org.icefaces.impl.context.DOMResponseWriter.cloneDocument(DOMResponseWriter.java:494)
at org.icefaces.impl.context.DOMResponseWriter.startSubtreeRendering(DOMResponseWriter.java:486)
at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:158)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:973)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:413)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
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 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1613)
Caused by: java.lang.NullPointerException
at org.icefaces.impl.fastinfoset.com.sun.xml.fastinfoset.util.NamespaceContextImplementation.declarePrefix(NamespaceContextImplementation.java:163)
at org.icefaces.impl.fastinfoset.com.sun.xml.fastinfoset.dom.DOMDocumentSerializer.serializeElement(DOMDocumentSerializer.java:142)
at org.icefaces.impl.fastinfoset.com.sun.xml.fastinfoset.dom.DOMDocumentSerializer.serialize(DOMDocumentSerializer.java:78)
at org.icefaces.impl.context.DOMResponseWriter.serializeDocument(DOMResponseWriter.java:546)
at org.icefaces.impl.context.DOMResponseWriter.cloneDocument(DOMResponseWriter.java:491)
... 30 more
java.lang.RuntimeException: Cannot clone document
at org.icefaces.impl.context.DOMResponseWriter.cloneDocument(DOMResponseWriter.java:494)
at org.icefaces.impl.context.DOMResponseWriter.startSubtreeRendering(DOMResponseWriter.java:486)
at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:158)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:973)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1779)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:413)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124)
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 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1657)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1613)
Caused by: java.lang.NullPointerException
at org.icefaces.impl.fastinfoset.com.sun.xml.fastinfoset.util.NamespaceContextImplementation.declarePrefix(NamespaceContextImplementation.java:163)
at org.icefaces.impl.fastinfoset.com.sun.xml.fastinfoset.dom.DOMDocumentSerializer.serializeElement(DOMDocumentSerializer.java:142)
at org.icefaces.impl.fastinfoset.com.sun.xml.fastinfoset.dom.DOMDocumentSerializer.serialize(DOMDocumentSerializer.java:78)
at org.icefaces.impl.context.DOMResponseWriter.serializeDocument(DOMResponseWriter.java:546)
at org.icefaces.impl.context.DOMResponseWriter.cloneDocument(DOMResponseWriter.java:491)
... 30 more
Issue Links
- depends on
-
ICE-9398 DOM clone/copy reduces adjacent TEXT nodes which causes unintended DOM differences, so javascript executes redundantly
-
- Closed
-
Further investigation shows that the root cause of the problem was related to the method we used to get a "clean" clone of the older DOM. Replacing the serialization algorithm in DOMResponseWriter with the import/set id algorithm that we currently use in the open source version (as per
ICE-9398) solves the problem. As this change has already been applied to both icefaces3/trunk and icefaces-ee/tags/icefaces-ee-3.3.0.GA_P01 I am marking as fixed. Testing using the libraries on the current P01 tag shows that the libraries do not show the problem when run with the test case.