logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

Re: urgent questions from germany: msg#00002

Subject: Re: urgent questions from germany
Hello Stefan,

i try to quickly give some pointers...

Stefan Grosser wrote:

_Hello Joern,_

First of all, a large respect for your Chiba achievements!

Unfortunately, I have the following problem:

I would like to lift out the Chiba 0.9.6 from its servlet environment.
In order to realize this I address the Chiba processor from an external class. I use all original files, like "html4.xsl", "html-form-controls.xsl" and "hello.xhtml" for it.

-------------------------------------------------------------------------------------------------------------
/My test class:/

    package org.chiba.main;

    import java.io.BufferedWriter;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;

    import org.chiba.xml.xforms.exception.XFormsException;
    import org.chiba.adapter.web.ServletAdapter;


    public class ExtStart {
public void to_servlet() throws IOException, XFormsException {

//    Konfiguration und indirekte Instantiierung der ChibaBean
ServletAdapter sap = new ServletAdapter();
            sap.setFormPath("D:\\DA\\Test\\source\\hello.xhtml");
            sap.setActionUrl("itemset.xml");
            sap.setStylesheet("D:\\DA\\Test\\xslt\\html4.xsl");
            sap.setStylesheetPath("D:\\DA\\Test\\xslt");
            sap.setCSS("D:\\DA\\Test\\styles\\mozilla-xforms.css");
            sap.init();
// Erzeugen des UserInterface OutputStream out = new FileOutputStream( "D:\\DA\\Test\\final.html" ); Writer w = new BufferedWriter(new OutputStreamWriter( out, "UTF-8" ));
            System.out.println(">>> Building User Interface ...");
            sap.buildUI(w);
            System.out.println(">>> Die Datei final.html wurde erzeugt.");
} public static void main(String[] args) throws IOException, XFormsException { ExtStart start = new ExtStart();
            start.to_servlet();
        }
    }

-------------------------------------------------------------------------------------------------------------


The DOMSource, which is provided by the original processor, is also perfectly identical to the DOMSource in my application. Therefore, I assume that my XForms processor (thus the ChibaBean) processes the input correctly.

The problem arises in the BuildUI phase, if Xalans "transform"-method is called: a "NullPointerException" occurs. (The arguments, with which the transform-method is called from the generate-method, are correct.)

-------------------------------------------------------------------------------------------------------------

/My Log:/

DEBUG: using form: D:\DA\Test\source\hello.xhtml
DEBUG: process: start
DEBUG: ensuring namespace: xforms:action='jsp/debug-instance.jsp'
DEBUG: ensuring namespace: xforms:method='post'
DEBUG: ensuring namespace: xforms:replace='all'
DEBUG: ensuring namespace: xforms:nodeset='name'
DEBUG: ensuring namespace: xforms:required='true()'
DEBUG: ensuring namespace: xforms:appearance='minimal'
DEBUG: ensuring namespace: xforms:bind='bind1'
DEBUG: ensuring namespace: xforms:appearance='minimal'
DEBUG: ensuring id: id='C1'
DEBUG: ensuring id: id='C2'
DEBUG: ensuring namespace: xforms:submission='debug'
DEBUG: process: finish
DEBUG: Formpath: D:\DA\Test\source\hello.xhtml
DEBUG: CSS-File: D:\DA\Test\styles\mozilla-xforms.css
DEBUG: XSLT stylesheet: D:\DA\Test\xslt\html4.xsl
DEBUG: action URL: itemset.xml
DEBUG: loading config from 'default.xml' ...
DEBUG: CSS: D:\DA\Test\styles\mozilla-xforms.css
DEBUG: init
DEBUG: creating event xforms-model-construct
DEBUG: dispatch: xforms-model-construct to [xforms:model: null]
DEBUG: dispatch: cancelable: false
DEBUG: dispatch: bubbles: true
DEBUG: [xforms:model id='C-1'] model construct
DEBUG: [xforms:instance id='C-2'] init
DEBUG: [xforms:bind id='bind1'] init
DEBUG: [xforms:bind id='bind1'] init: resolved location path: /*[1]/name
DEBUG: [xforms:bind id='bind1'] init: initializing model item for path '/data[1]/name[1]' DEBUG: [xforms:instance id='C-2'] getDataItem: looking for canonical path '/data[1]/name[1]' DEBUG: [xforms:instance id='C-2'] getDataItem: model item created for canonical path '/data[1]/name[1]'
DEBUG: [xforms:submission id='debug'] init
DEBUG: creating event xforms-rebuild
DEBUG: dispatch: xforms-rebuild to [xforms:model: null]
DEBUG: dispatch: cancelable: true
DEBUG: dispatch: bubbles: true
DEBUG: [xforms:model id='C-1'] rebuild
DEBUG: [xforms:model id='C-1'] rebuild: creating main dependency graph for 1 bind(s) DEBUG: [xforms:instance id='C-2'] getDataItem: looking for canonical path '/data[1]/name[1]'
DEBUG: built vertex required(true())
DEBUG: evaluated expression 'true()' to 'true'
DEBUG: creating event xforms-recalculate
DEBUG: dispatch: xforms-recalculate to [xforms:model: null]
DEBUG: dispatch: cancelable: true
DEBUG: dispatch: bubbles: true
DEBUG: [xforms:model id='C-1'] recalculate
DEBUG: [xforms:model id='C-1'] recalculate: creating sub dependency graph for 1 node(s)
DEBUG: starting recalculation ...
DEBUG: evaluated expression 'true()' to 'true'
DEBUG: ... recalculation finished
DEBUG: creating event xforms-revalidate
DEBUG: dispatch: xforms-revalidate to [xforms:model: null]
DEBUG: dispatch: cancelable: true
DEBUG: dispatch: bubbles: true
DEBUG: [xforms:model id='C-1'] revalidate
DEBUG: [xforms:model id='C-1'] revalidate: revalidating 1 instance(s)
DEBUG: [xforms:instance id='C-2'] getDataItem: looking for canonical path '/data[1]' DEBUG: [xforms:instance id='C-2'] getDataItem: model item created for canonical path '/data[1]'
DEBUG: computed valid node /data[1]
DEBUG: [xforms:instance id='C-2'] getDataItem: looking for canonical path '/data[1]/name[1]'
DEBUG: computed invalid node /data[1]/name[1]
DEBUG: creating event xforms-model-construct-done
DEBUG: dispatch: xforms-model-construct-done to [xforms:model: null]
DEBUG: dispatch: cancelable: false
DEBUG: dispatch: bubbles: true
DEBUG: [xforms:model id='C-1'] model construct done
DEBUG: [xforms:model id='C-1'] model construct done: starting ui initialization
DEBUG: [xforms:group id='C-3'] init
DEBUG: [xforms:label id='C-4'] init
DEBUG: [xforms:instance id='C-2'] getDataItem: looking for canonical path '/data[1]/name[1]' DEBUG: [xforms:instance id='C-2'] getDataItem: looking for canonical path '/data[1]/name[1]'
DEBUG: [xforms:label id='C-5'] init
DEBUG: [xforms:alert id='C-6'] init
DEBUG: [xforms:hint id='C-7'] init
DEBUG: [xforms:group id='C-8'] init
DEBUG: [xforms:trigger id='C1'] init
DEBUG: [xforms:label id='C-11'] init
DEBUG: [xforms:action id='C-12'] init
DEBUG: [xforms:trigger id='reset-btn'] init
DEBUG: [xforms:label id='C-11'] init
DEBUG: [xforms:action id='C-12'] init
WARN: [xforms:reset id='reset'] init: the 'model' attribute is missing, assuming parent model 'C-1'
DEBUG: creating event xforms-ready
DEBUG: dispatch: xforms-ready to [xforms:model: null]
DEBUG: dispatch: cancelable: false
DEBUG: dispatch: bubbles: true
DEBUG: [xforms:model id='C-1'] ready
 >>> Building User Interface ...
DEBUG: setting UI generator param 'phase': init
DEBUG: setting UI generator param 'data-prefix': d_
DEBUG: setting UI generator param 'trigger-prefix': t_
DEBUG: setting UI generator param 'user-agent': null
DEBUG: received input node ...
<?xml version="1.0" encoding="ISO-8859-1"?>
<html xml:base="http://localhost:8080/chiba-0.9.6/"; xmlns="http://www.w3.org/2002/06/xhtml2"; xmlns:chiba="http://chiba.sourceforge.net/2003/08/xforms"; xmlns:xforms="http://www.w3.org/2002/xforms"; xmlns:xsd="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
    <head>
        <title>hello</title>
        <xforms:model id="C-1">
<xforms:submission id="debug" xforms:action="jsp/debug-instance.jsp" xforms:method="post" xforms:replace="all"/>
            <xforms:instance id="C-2" xmlns="">
                <data>
                    <name/>
                </data>
            </xforms:instance>
<xforms:bind id="bind1" xforms:nodeset="name" xforms:required="true()"/>
        </xforms:model>
    </head>
    <body>
        <xforms:group id="C-3" xforms:appearance="minimal">
            <xforms:label id="C-4">Hello</xforms:label>
            <xforms:input id="name-input" xforms:bind="bind1">
                <xforms:label id="C-5">Your name: </xforms:label>
<xforms:alert id="C-6">Please put your name here</xforms:alert> <xforms:hint id="C-7">Please input your name into this field</xforms:hint> <chiba:data chiba:enabled="true" chiba:readonly="false" chiba:required="true" chiba:type="string" chiba:valid="true" chiba:visited="false" chiba:xpath="/data[1]/name[1]"></chiba:data>
            </xforms:input>
            <xforms:group id="C-8" xforms:appearance="minimal">
<!-- <xforms:submit id="C-9" submission="debug">--> <!-- <xforms:label id="C-10">Debug</xforms:label>-->
                <!--                </xforms:submit>-->
                <xforms:trigger id="C1">
                    <xforms:label id="C-11">Debug</xforms:label>
                    <xforms:action id="C-12">
                        <xforms:send id="C2" xforms:submission="debug"/>
                    </xforms:action>
<chiba:data chiba:enabled="true" chiba:readonly="false" chiba:required="false" chiba:valid="true" chiba:visited="false"/>
                </xforms:trigger>
                <xforms:trigger id="reset-btn">
                    <xforms:label id="C-11">Reset</xforms:label>
                    <xforms:action id="C-12">
                        <xforms:reset id="reset"/>
                    </xforms:action>
<chiba:data chiba:enabled="true" chiba:readonly="false" chiba:required="false" chiba:valid="true" chiba:visited="false"/>
                </xforms:trigger>
            </xforms:group>
        </xforms:group>
    </body>
</html>
DEBUG: org.apache.xalan.processor.TransformerFactoryImpl@6e293a
DEBUG: fileName: html4.xsl
DEBUG: URIResolver: org.chiba.tools.xslt.XSLTGenerator@54a328
DEBUG: loadFromDisk: D:\DA\Test\xslt\html4.xsl
stylesheet filename to load: html4.xsl
DEBUG: Stylesheet 'html4.xsl' will be compiled
DEBUG: URIRESOLVER CALLED
DEBUG: URIRESOLVER href: html-form-controls.xsl
DEBUG: URIRESOLVER base: D:\Programmierung\Eclipse 3.0\workspace\chibatest 0.9.6\*dummy*.xsl *????????*
DEBUG: loadFromDisk: D:\DA\Test\xslt\html-form-controls.xsl
stylesheet filename to load: html-form-controls.xsl
DEBUG: adding html4.xsl to cache
org.apache.xalan.templates.StylesheetRoot@11671b2

TransformerParameters:
 >>> action-url: itemset.xml
 >>> data-prefix: d_
 >>> debug-enabled: true
 >>> trigger-prefix: t_
 >>> phase: init
 >>> css-file: D:\DA\Test\styles\mozilla-xforms.css
 >>> selector-prefix: s_
 >>> DOM Source: javax.xml.transform.dom.DOMSource@c9d92c
>>> Stylesheet: html-default / InputNode: [#document: null] / org.chiba.tools.xslt.XSLTGenerator@54a328 file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; processing phase:
                init
file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; ********** XSLT MESSAGES ARE ENABLED file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; html file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; head file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; user agent:
                default
file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; body file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; found minimal group file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl; Zeilennummer0; Spaltennummer0; handling group label ...
org.chiba.xml.xforms.exception.XFormsException
    at org.chiba.tools.xslt.XSLTGenerator.generate(XSLTGenerator.java:195)
    at org.chiba.adapter.web.ServletAdapter.buildUI(ServletAdapter.java:355)
    at org.chiba.main.ExtStart.to_servlet(ExtStart.java:33)
    at org.chiba.main.ExtStart.main(ExtStart.java:41)
*; SystemID: file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl*
javax.xml.transform.TransformerException: java.lang.NullPointerException
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2341) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2202) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1276) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:673) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1192) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1170)
    at org.chiba.tools.xslt.XSLTGenerator.generate(XSLTGenerator.java:192)
    at org.chiba.adapter.web.ServletAdapter.buildUI(ServletAdapter.java:355)
    at org.chiba.main.ExtStart.to_servlet(ExtStart.java:33)
    at org.chiba.main.ExtStart.main(ExtStart.java:41)
Caused by: java.lang.NullPointerException
at org.apache.xml.serializer.ToHTMLStream.processAttribute(ToHTMLStream.java:939) at org.apache.xml.serializer.ToHTMLStream.processAttributes(ToHTMLStream.java:1628) at org.apache.xml.serializer.ToHTMLStream.endElement(ToHTMLStream.java:865) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:707) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:177) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336)
    ... 9 more
---------
java.lang.NullPointerException
at org.apache.xml.serializer.ToHTMLStream.processAttribute(ToHTMLStream.java:939) at org.apache.xml.serializer.ToHTMLStream.processAttributes(ToHTMLStream.java:1628) at org.apache.xml.serializer.ToHTMLStream.endElement(ToHTMLStream.java:865) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:707) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:177) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2202) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1276) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:673) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1192) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1170)
    at org.chiba.tools.xslt.XSLTGenerator.generate(XSLTGenerator.java:192)
    at org.chiba.adapter.web.ServletAdapter.buildUI(ServletAdapter.java:355)
    at org.chiba.main.ExtStart.to_servlet(ExtStart.java:33)
    at org.chiba.main.ExtStart.main(ExtStart.java:41)
; SystemID: file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/dummy.xsl
javax.xml.transform.TransformerException: java.lang.NullPointerException
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2341) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2202) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1276) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:673) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1192) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1170)
    at org.chiba.tools.xslt.XSLTGenerator.generate(XSLTGenerator.java:192)
    at org.chiba.adapter.web.ServletAdapter.buildUI(ServletAdapter.java:355)
    at org.chiba.main.ExtStart.to_servlet(ExtStart.java:33)
    at org.chiba.main.ExtStart.main(ExtStart.java:41)
Caused by: java.lang.NullPointerException
at org.apache.xml.serializer.ToHTMLStream.processAttribute(ToHTMLStream.java:939) at org.apache.xml.serializer.ToHTMLStream.processAttributes(ToHTMLStream.java:1628) at org.apache.xml.serializer.ToHTMLStream.endElement(ToHTMLStream.java:865) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:707) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:177) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336)
    ... 9 more
---------
java.lang.NullPointerException
at org.apache.xml.serializer.ToHTMLStream.processAttribute(ToHTMLStream.java:939) at org.apache.xml.serializer.ToHTMLStream.processAttributes(ToHTMLStream.java:1628) at org.apache.xml.serializer.ToHTMLStream.endElement(ToHTMLStream.java:865) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:707) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:177) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2202) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1276) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:673) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1192) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1170)
    at org.chiba.tools.xslt.XSLTGenerator.generate(XSLTGenerator.java:192)
    at org.chiba.adapter.web.ServletAdapter.buildUI(ServletAdapter.java:355)
    at org.chiba.main.ExtStart.to_servlet(ExtStart.java:33)
    at org.chiba.main.ExtStart.main(ExtStart.java:41)
Exception in thread "main"

-------------------------------------------------------------------------------------------------------------


In the XSL-Stylesheet "html4.xsl" the first problem is placed here:


-------------------------------------------------------------------------------------------------------------

/stylesheet "html4.xsl": /

...
<!-- ###################################### MINIMAL GROUP ###################################### --> <!-- handle 'minimal' group - this is the default for groups and only annotates CSS to labels + controls and
    outputs them in a kind of flow-layout -->
    <xsl:template match="xforms:group[@xforms:appearance='minimal']">
        <xsl:if test="$debug-enabled='true'">
            <xsl:message>found minimal group</xsl:message>
        </xsl:if>
        <!-- ***** ignore this group if not enabled ***** -->
<!-- <xsl:if test="not(chiba:data/@chiba:enabled='false')">-->
        <xsl:variable name="group-css">
            <xsl:call-template name="assembleClasses"/>
        </xsl:variable>
        <div class="{concat('minimal-group',$group-css)}" id="{@id}">
            <xsl:copy-of select="@class"/>
            <xsl:for-each select="*">
                <xsl:choose>
                    <!-- **** handle group label ***** -->
<xsl:when test="self::xforms:label" xmlns:xforms="http://www.w3.org/2002/xforms";>
                        <xsl:if test="$debug-enabled='true'">
<xsl:message>handling group label ...</xsl:message>
                        </xsl:if>
                        *<span class="minimal-group-label label">*
                            <xsl:apply-templates select="."/>
                        *</span>*
                    </xsl:when>
...

-------------------------------------------------------------------------------------------------------------
after first quick view this seems to be an configuration issue with the
Xalan libs your using. You should examine your classpath for potential
clashes...

MY QUESTIONS:

1.) I imported the complete "src"-path (org and tools) into my Eclipse-project. Do further classes have to be imported for my purpose ?
sure you need to add the libs coming with Chiba to your classpath. not
all of them may be needed for your purpose.

2.) If I transform the UI-DOM from the Tomcat console (as input) with the Stylesheet "html4.xsl" and XALAN outside of the Servlet environment, the error in the place in the Stylesheet, specified above, arises. Within the Servlet environment the transformation functions perfectly.
        What causes the difference?
i suspect the Xalan version being the problem - compare the libs used at
runtime in your different settings.

3.) Why does the error message point to the fictitious stylesheet "dummy.xsl" ?
this is another indicator that you're using an older Xalan - this
confusing and misleading error-message comes from Xalan when you're
using it with a DOMSource object.


4.) Why does the log point to the project directory file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/*dummy.xsl*,
        and _not_ to*
*file:///D:/Programmierung/Eclipse%203.0/workspace/chibatest%200.9.6/*javax.xml.transform.dom.DOMSource* ?
see above - Xalan sets a dummy.xsl for every DOMSource input and
resolves that to the execution root of your app.


5.) If I deactivate the error causing lines in the stylesheet "html4.xsl", or if I do without groups and repeats in the XForms document, the transformation runs off error free and I receive a HTML-document (over a responseWriter). But the HTML document contains no "class"-attributes (e.g. <span class="trigger valid readwrite optional enabled">). Can the error be caused by a not found CSS class (in the example: "minimal-group-label") ?
        The CSS class for "minimal-group" is found correct.
Does the CSS files have to be present at a certain place?
*
Most of your problems should vanish when you fix the Xalan issue -
another common pitfall is the usage of the DOM3* jars. these are
absolutely required and have to be on the classpath overwriting the XML
parser classes coming with the JDK.

hope this helps,

Joern


I thank you for your efforts and hope for fast answer.*


best regards from germany

Stefan Grosser






-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click


<Prev in Thread] Current Thread [Next in Thread>