-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/17228/
-----------------------------------------------------------

(Updated Jan. 28, 2014, 2:10 a.m.)


Review request for shindig, Dan Dumont, Ryan Baxter, Rich Thompson, Stanton 
Sievers, and Zhi Hong Yang.


Changes
-------

Add Shindig to the groups for the review


Bugs: SHINDIG-1893
    https://issues.apache.org/jira/browse/SHINDIG-1893


Repository: shindig


Description
-------

During our gadget development, several gadgets are referring to the same gadget 
template. The rendering of those gadgets is problematic sometimes.

When the problem occur, the Java stack trace look like this:

Stack Dump = java.lang.NullPointerException
       at org.apache.xerces.dom.ParentNode.nodeListItem(Unknown Source)
       at org.apache.xerces.dom.ParentNode.item(Unknown Source)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processChildNodes(DefaultTemplateProcessor.java:134)
       at 
org.apache.shindig.gadgets.templates.tags.TemplateBasedTagHandler.processTemplate(TemplateBasedTagHandler.java:68)
       at 
org.apache.shindig.gadgets.templates.tags.TemplateBasedTagHandler.process(TemplateBasedTagHandler.java:58)
       at 
org.apache.shindig.gadgets.templates.XmlTemplateLibrary$LibraryTagHandler.process(XmlTemplateLibrary.java:305)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processElementInner(DefaultTemplateProcessor.java:341)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processElement(DefaultTemplateProcessor.java:246)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processNode(DefaultTemplateProcessor.java:154)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processChildNodes(DefaultTemplateProcessor.java:134)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processTemplate(DefaultTemplateProcessor.java:126)
       at 
org.apache.shindig.gadgets.rewrite.TemplateRewriter.executeTemplates(TemplateRewriter.java:357)
       at 
org.apache.shindig.gadgets.rewrite.TemplateRewriter.rewriteImpl(TemplateRewriter.java:177)
       at 
org.apache.shindig.gadgets.rewrite.TemplateRewriter.rewrite(TemplateRewriter.java:129)
       at 
org.apache.shindig.gadgets.render.HtmlRenderer.render(HtmlRenderer.java:88)
       at org.apache.shindig.gadgets.render.Renderer.render(Renderer.java:101)
       at 
org.apache.shindig.gadgets.servlet.GadgetRenderingServlet.render(GadgetRenderingServlet.java:112)
       at 
org.apache.shindig.gadgets.servlet.GadgetRenderingServlet.doGet(GadgetRenderingServlet.java:90)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:575)

Stack Dump2 =  java.lang.NullPointerException
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processText(DefaultTemplateProcessor.java:174)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processNode(DefaultTemplateProcessor.java:151)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processChildNodes(DefaultTemplateProcessor.java:134)
       at 
org.apache.shindig.gadgets.templates.tags.TemplateBasedTagHandler.processTemplate(TemplateBasedTagHandler.java:68)
       at 
org.apache.shindig.gadgets.templates.tags.TemplateBasedTagHandler.process(TemplateBasedTagHandler.java:58)
       at 
org.apache.shindig.gadgets.templates.XmlTemplateLibrary$LibraryTagHandler.process(XmlTemplateLibrary.java:305)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processElementInner(DefaultTemplateProcess"
 severity="50" version="1.0.1">
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processElement(DefaultTemplateProcessor.java:247)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processNode(DefaultTemplateProcessor.java:154)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processChildNodes(DefaultTemplateProcessor.java:134)
       at 
org.apache.shindig.gadgets.templates.DefaultTemplateProcessor.processTemplate(DefaultTemplateProcessor.java:126)
       at 
org.apache.shindig.gadgets.rewrite.TemplateRewriter.executeTemplates(TemplateRewriter.java:358)
       at 
org.apache.shindig.gadgets.rewrite.TemplateRewriter.rewriteImpl(TemplateRewriter.java:178)
       at 
org.apache.shindig.gadgets.rewrite.TemplateRewriter.rewrite(TemplateRewriter.java:130)
       at 
org.apache.shindig.gadgets.render.HtmlRenderer.render(HtmlRenderer.java:88)
       at org.apache.shindig.gadgets.render.Renderer.render(Renderer.java:101)
       at 
org.apache.shindig.gadgets.servlet.GadgetRenderingServlet.render(GadgetRenderingServlet.java:107)
       at 
org.apache.shindig.gadgets.servlet.GadgetRenderingServlet.doGet(GadgetRenderingServlet.java:85)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)

The Xerces implementation is not thread safe and when we are caching the 
template we can potentially have multiple threads manipulating the same Element 
object.  This results in random null pointer exceptions as well as other odd 
exceptions in the code. The solution is to add synchronized to the key XML 
element.


Diffs
-----

  
/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
 1560262 
  
/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateLibraryFactory.java
 1560262 
  
/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/XmlTemplateLibrary.java
 1560262 
  
/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/FlashTagHandler.java
 1560262 
  
/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandler.java
 1560262 

Diff: https://reviews.apache.org/r/17228/diff/


Testing
-------


Thanks,

ChunYan Zhang

Reply via email to