[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xalan-dev
Subject:    Extension elements accessing variables
From:       Adam Jenkins <mail () adamjenkins ! net>
Date:       2021-02-03 3:16:01
Message-ID: 3DD173E3-64BF-4BB7-A129-8DC66E5CDF9E () adamjenkins ! net
[Download RAW message or body]

Hi Everyone,

I have an old extension element that used to work that I'm dusting off to use again \
(haven't used it in years).  It had some code in it that used to evaluate an XPath \
and return an XObject that gave a reference to a previously declared variable….but \
now it gives back and XRTreeFrag.  Any idea what I'm doing wrong?  I use the \
attribute to pass previously created Java objects to my extension element.

Cheers
Adam

    public static XObject getXObject(final String xpathAttributeName, final \
                XSLProcessorContext context, final ElemExtensionCall \
                extensionElement){
        XPathContext xCtx = context.getTransformer().getXPathContext();    
        String selectExpressionString = null;
        boolean namespacePushed = false;
        boolean expressionPushed = false;
        try{   
            selectExpressionString = \
                extensionElement.getAttribute(xpathAttributeName);           
            XPath xpath = new XPath(selectExpressionString, xCtx.getSAXLocator(), \
extensionElement, XPath.SELECT);  xCtx.pushNamespaceContext(extensionElement);        \
  namespacePushed = true;
            int current = xCtx.getCurrentNode();
            xCtx.pushCurrentNodeAndExpression(current, current);        
            expressionPushed=true;
            Expression expr = xpath.getExpression();
            XObject result = expr.execute(xCtx);
            return result;
        }catch(Throwable t){
            log.error("Error evaluating xpath attribute " + xpathAttributeName + " [" \
+ selectExpressionString + "]", t);  return null;
        }
        finally
        {            
            if(namespacePushed) xCtx.popNamespaceContext();
            if(expressionPushed) xCtx.popCurrentNodeAndExpression();         
        }          
    }


[Attachment #3 (unknown)]

<html><head><meta http-equiv="Content-Type" content="text/html; \
charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; \
line-break: after-white-space;" class="">Hi Everyone,<div class=""><br \
class=""></div><div class="">I have an old extension element that used to work that \
I'm dusting off to use again (haven't used it in years). &nbsp;It had some code in it \
that used to evaluate an XPath and return an XObject that gave a reference to a \
previously declared variable….but now it gives back and XRTreeFrag. &nbsp;Any idea \
what I'm doing wrong? &nbsp;I use the attribute to pass previously created Java \
objects to my extension element.</div><div class=""><br class=""></div><div \
class="">Cheers</div><div class="">Adam</div><div class=""><br class=""></div><div \
class=""><div style="margin: 0px; font-stretch: normal; line-height: normal; \
font-family: Menlo;" class="">&nbsp; &nbsp;&nbsp;<span style="color: #7f0055" \
class=""><b class="">public</b></span> <span style="color: #7f0055" class=""><b \
class="">static</b></span> XObject getXObject(<span style="color: #7f0055" \
class=""><b class="">final</b></span> String <span style="color: #6a3e3e" \
class="">xpathAttributeName</span>, <span style="color: #7f0055" class=""><b \
class="">final</b></span> XSLProcessorContext <span style="color: #6a3e3e" \
class="">context</span>, <span style="color: #7f0055" class=""><b \
class="">final</b></span> ElemExtensionCall <span style="color: #6a3e3e" \
class="">extensionElement</span>){</div><div style="margin: 0px; font-stretch: \
normal; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; \
&nbsp; XPathContext <span style="color: #6a3e3e" class="">xCtx</span> = <span \
style="color: #6a3e3e" class="">context</span>.getTransformer().getXPathContext(); \
&nbsp; &nbsp;</div><div style="margin: 0px; font-stretch: normal; line-height: \
normal; font-family: Menlo; color: rgb(106, 62, 62);" class=""><span style="color: \
#000000" class="">&nbsp; &nbsp; &nbsp; &nbsp; String \
</span>selectExpressionString<span style="color: #000000" class=""> = </span><span \
style="color: #7f0055" class=""><b class="">null</b></span><span style="color: \
#000000" class="">;</span></div><div style="margin: 0px; font-stretch: normal; \
line-height: normal; font-family: Menlo; color: rgb(106, 62, 62);" class=""><span \
style="color: #000000" class="">&nbsp; &nbsp; &nbsp; &nbsp; </span><span \
style="color: #7f0055" class=""><b class="">boolean</b></span><span style="color: \
#000000" class=""> </span>namespacePushed<span style="color: #000000" class=""> = \
</span><span style="color: #7f0055" class=""><b class="">false</b></span><span \
style="color: #000000" class="">;</span></div><div style="margin: 0px; font-stretch: \
normal; line-height: normal; font-family: Menlo; color: rgb(106, 62, 62);" \
class=""><span style="color: #000000" class="">&nbsp; &nbsp; &nbsp; &nbsp; \
</span><span style="color: #7f0055" class=""><b class="">boolean</b></span><span \
style="color: #000000" class=""> </span>expressionPushed<span style="color: #000000" \
class=""> = </span><span style="color: #7f0055" class=""><b \
class="">false</b></span><span style="color: #000000" class="">;</span></div><div \
style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo;" \
class="">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055" class=""><b \
class="">try</b></span>{&nbsp; &nbsp;</div><div style="margin: 0px; font-stretch: \
normal; line-height: normal; font-family: Menlo; color: rgb(106, 62, 62);" \
class=""><span style="color: #000000" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; </span>selectExpressionString<span style="color: #000000" class=""> = \
</span>extensionElement<span style="color: #000000" \
class="">.getAttribute(</span>xpathAttributeName<span style="color: #000000" \
class="">);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></div><div style="margin: \
0px; font-stretch: normal; line-height: normal; font-family: Menlo;" class="">&nbsp; \
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XPath <span style="color: #6a3e3e" \
class="">xpath</span> = <span style="color: #7f0055" class=""><b \
class="">new</b></span> XPath(<span style="color: #6a3e3e" \
class="">selectExpressionString</span>, <span style="color: #6a3e3e" \
class="">xCtx</span>.getSAXLocator(), <span style="color: #6a3e3e" \
class="">extensionElement</span>, XPath.<span style="color: #0000c0" class=""><b \
class=""><i class="">SELECT</i></b></span>);</div><div style="margin: 0px; \
font-stretch: normal; line-height: normal; font-family: Menlo;" class="">&nbsp; \
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6a3e3e" \
class="">xCtx</span>.pushNamespaceContext(<span style="color: #6a3e3e" \
class="">extensionElement</span>); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; \
font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span \
style="color: #6a3e3e" class="">namespacePushed</span> = <span style="color: #7f0055" \
class=""><b class="">true</b></span>;</div><div style="margin: 0px; font-stretch: \
normal; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp; &nbsp; <span style="color: #7f0055" class=""><b class="">int</b></span> \
<span style="color: #6a3e3e" class="">current</span> = <span style="color: #6a3e3e" \
class="">xCtx</span>.getCurrentNode();</div><div style="margin: 0px; font-stretch: \
normal; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp; &nbsp; <span style="color: #6a3e3e" \
class="">xCtx</span>.pushCurrentNodeAndExpression(<span style="color: #6a3e3e" \
class="">current</span>, <span style="color: #6a3e3e" class="">current</span>); \
&nbsp; &nbsp; &nbsp; &nbsp;</div><div style="margin: 0px; font-stretch: normal; \
line-height: normal; font-family: Menlo; color: rgb(106, 62, 62);" class=""><span \
style="color: #000000" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
</span>expressionPushed<span style="color: #000000" class="">=</span><span \
style="color: #7f0055" class=""><b class="">true</b></span><span style="color: \
#000000" class="">;</span></div><div style="margin: 0px; font-stretch: normal; \
line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; Expression <span style="color: #6a3e3e" class="">expr</span> = <span \
style="color: #6a3e3e" class="">xpath</span>.getExpression();</div><div \
style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo;" \
class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XObject <span style="color: \
#6a3e3e" class="">result</span> = <span style="color: #6a3e3e" \
class="">expr</span>.execute(<span style="color: #6a3e3e" \
class="">xCtx</span>);</div><div style="margin: 0px; font-stretch: normal; \
line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; <span style="color: #7f0055" class=""><b class="">return</b></span> <span \
style="color: #6a3e3e" class="">result</span>;</div><div style="margin: 0px; \
font-stretch: normal; line-height: normal; font-family: Menlo;" class="">&nbsp; \
&nbsp; &nbsp; &nbsp; }<span style="color: #7f0055" class=""><b \
class="">catch</b></span>(Throwable <span style="color: #6a3e3e" \
class="">t</span>){</div><div style="margin: 0px; font-stretch: normal; line-height: \
normal; font-family: Menlo; color: rgb(42, 0, 255);" class=""><span style="color: \
#000000" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span \
style="color: #0000c0" class=""><b class=""><i class="">log</i></b></span><span \
style="color: #000000" class="">.error(</span>"Error evaluating xpath attribute \
"<span style="color: #000000" class=""> + </span><span style="color: #6a3e3e" \
class="">xpathAttributeName</span><span style="color: #000000" class=""> + </span>" \
["<span style="color: #000000" class=""> + </span><span style="color: #6a3e3e" \
class="">selectExpressionString</span><span style="color: #000000" class=""> + \
</span>"]"<span style="color: #000000" class="">, </span><span style="color: #6a3e3e" \
class="">t</span><span style="color: #000000" class="">);</span></div><div \
style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo;" \
class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055" \
class=""><b class="">return</b></span> <span style="color: #7f0055" class=""><b \
class="">null</b></span>;</div><div style="margin: 0px; font-stretch: normal; \
line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; \
}</div><div style="margin: 0px; font-stretch: normal; line-height: normal; \
font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: \
#7f0055" class=""><b class="">finally</b></span></div><div style="margin: 0px; \
font-stretch: normal; line-height: normal; font-family: Menlo;" class="">&nbsp; \
&nbsp; &nbsp; &nbsp; { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div \
style="margin: 0px; font-stretch: normal; line-height: normal; font-family: Menlo;" \
class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055" \
class=""><b class="">if</b></span>(<span style="color: #6a3e3e" \
class="">namespacePushed</span>) <span style="color: #6a3e3e" \
class="">xCtx</span>.popNamespaceContext();</div><div style="margin: 0px; \
font-stretch: normal; line-height: normal; font-family: Menlo;" class="">&nbsp; \
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7f0055" class=""><b \
class="">if</b></span>(<span style="color: #6a3e3e" class="">expressionPushed</span>) \
<span style="color: #6a3e3e" \
class="">xCtx</span>.popCurrentNodeAndExpression();&nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp;</div><div style="margin: 0px; font-stretch: normal; line-height: normal; \
font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; \
&nbsp; &nbsp;</div><div style="margin: 0px; font-stretch: normal; line-height: \
normal; font-family: Menlo;" class="">&nbsp; &nbsp; }</div></div></body></html>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic