https://saxonica.plan.io/
https://saxonica.plan.io/favicon.ico
2019-08-26T14:10:06Z
Saxonica Developer Community
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14070
2019-08-26T14:10:06Z
Michael Kay
mike@saxonica.com
<ul></ul><p>Try <code>selector.getUnderlyingXPathContext().setErrorListener()</code></p>
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14076
2019-08-27T06:39:58Z
Rick Vlaming
<ul></ul><p>Tried but unfortunately not working.</p>
<p>When putting breakpoints on constructor and all methods in the LocalErrorListener-class the only stop is in the constructor.</p>
<pre><code class="java syntaxhl" data-language="java">
<span class="kd">private</span> <span class="kt">boolean</span> <span class="nf">isDeepEqual</span><span class="o">(</span><span class="nc">XdmNode</span> <span class="n">node1</span><span class="o">,</span> <span class="nc">XdmNode</span> <span class="n">node2</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">SaxonApiException</span> <span class="o">{</span>
<span class="nc">XPathCompiler</span> <span class="n">xpath</span> <span class="o">=</span> <span class="n">processor</span><span class="o">.</span><span class="na">newXPathCompiler</span><span class="o">();</span>
<span class="nc">ItemTypeFactory</span> <span class="n">itf</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ItemTypeFactory</span><span class="o">(</span><span class="n">processor</span><span class="o">);</span>
<span class="nc">ItemType</span> <span class="n">decimalType</span> <span class="o">=</span> <span class="n">itf</span><span class="o">.</span><span class="na">getAtomicType</span><span class="o">(</span><span class="k">new</span> <span class="nc">QName</span><span class="o">(</span><span class="s">"http://www.w3.org/2001/XMLSchema"</span><span class="o">,</span> <span class="s">"decimal"</span><span class="o">));</span>
<span class="n">xpath</span><span class="o">.</span><span class="na">declareVariable</span><span class="o">(</span><span class="k">new</span> <span class="nc">QName</span><span class="o">(</span><span class="s">"urn:us:xpath:var"</span><span class="o">,</span> <span class="s">"node1"</span><span class="o">));</span>
<span class="n">xpath</span><span class="o">.</span><span class="na">declareVariable</span><span class="o">(</span><span class="k">new</span> <span class="nc">QName</span><span class="o">(</span><span class="s">"urn:us:xpath:var"</span><span class="o">,</span> <span class="s">"node2"</span><span class="o">));</span>
<span class="n">xpath</span><span class="o">.</span><span class="na">declareNamespace</span><span class="o">(</span><span class="s">"vmgv"</span><span class="o">,</span> <span class="s">"urn:us:xpath:var"</span><span class="o">);</span>
<span class="n">xpath</span><span class="o">.</span><span class="na">declareNamespace</span><span class="o">(</span><span class="s">"saxon"</span><span class="o">,</span> <span class="s">"http://saxon.sf.net/"</span><span class="o">);</span>
<span class="nc">XPathExecutable</span> <span class="n">xx</span> <span class="o">=</span> <span class="n">xpath</span><span class="o">.</span><span class="na">compile</span><span class="o">(</span><span class="s">"saxon:deep-equal($vmgv:node1, $vmgv:node2, () ,'w?')"</span><span class="o">);</span>
<span class="nc">XPathSelector</span> <span class="n">selector</span> <span class="o">=</span> <span class="n">xx</span><span class="o">.</span><span class="na">load</span><span class="o">();</span>
<span class="n">selector</span><span class="o">.</span><span class="na">getUnderlyingXPathContext</span><span class="o">().</span><span class="na">setErrorListener</span><span class="o">(</span><span class="k">new</span> <span class="nc">LocalErrorListener</span><span class="o">());</span>
<span class="n">selector</span><span class="o">.</span><span class="na">setVariable</span><span class="o">(</span><span class="k">new</span> <span class="nc">QName</span><span class="o">(</span><span class="s">"urn:us:xpath:var"</span><span class="o">,</span> <span class="s">"node1"</span><span class="o">),</span> <span class="n">node1</span><span class="o">);</span>
<span class="n">selector</span><span class="o">.</span><span class="na">setVariable</span><span class="o">(</span><span class="k">new</span> <span class="nc">QName</span><span class="o">(</span><span class="s">"urn:us:xpath:var"</span><span class="o">,</span> <span class="s">"node2"</span><span class="o">),</span> <span class="n">node2</span><span class="o">);</span>
<span class="nc">XdmAtomicValue</span> <span class="n">deepEqualResult</span> <span class="o">=</span> <span class="o">(</span><span class="nc">XdmAtomicValue</span><span class="o">)</span> <span class="n">selector</span><span class="o">.</span><span class="na">evaluateSingle</span><span class="o">();</span>
<span class="k">return</span> <span class="n">deepEqualResult</span><span class="o">.</span><span class="na">getBooleanValue</span><span class="o">();</span>
<span class="o">}</span>
<span class="kd">private</span> <span class="kd">class</span> <span class="nc">LocalErrorListener</span> <span class="kd">implements</span> <span class="nc">UnfailingErrorListener</span> <span class="o">{</span>
<span class="kd">private</span> <span class="kd">final</span> <span class="nc">StringBuilder</span> <span class="n">errors</span><span class="o">;</span>
<span class="nc">LocalErrorListener</span><span class="o">()</span> <span class="o">{</span>
<span class="n">errors</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">StringBuilder</span><span class="o">();</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">warning</span><span class="o">(</span><span class="nc">TransformerException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">errors</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">getMessage</span><span class="o">());</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">error</span><span class="o">(</span><span class="nc">TransformerException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">errors</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">getMessage</span><span class="o">());</span>
<span class="o">}</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">fatalError</span><span class="o">(</span><span class="nc">TransformerException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">errors</span><span class="o">.</span><span class="na">append</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">getMessage</span><span class="o">());</span>
<span class="o">}</span>
<span class="kd">public</span> <span class="nc">String</span> <span class="nf">getErrors</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="n">errors</span><span class="o">.</span><span class="na">toString</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
</code></pre>
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14081
2019-08-27T09:01:28Z
Michael Kay
mike@saxonica.com
<ul><li><strong>Description</strong> updated (<a title="View differences" href="/journals/14081/diff?detail_id=19730">diff</a>)</li><li><strong>Category</strong> set to <i>s9api API</i></li><li><strong>Assignee</strong> set to <i>Michael Kay</i></li></ul>
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14083
2019-08-27T09:52:39Z
Michael Kay
mike@saxonica.com
<ul></ul><p>It turns out the warnings are always going to the ErrorListener associated with the Configuration. So it will have to be <code>processor.getUnderlyingConfiguration().setErrorListener(....)</code></p>
<p>Unfortunately this sets the <code>ErrorListener</code> globally which isn't ideal.</p>
<p>I have patched DeepEqual() to use the ErrorListener from the XPathContext rather than from the Configuration. Unfortunately this changes the interface to DeepEqual.deepEquals() which is a public method that some users might be using.</p>
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14087
2019-08-27T13:41:03Z
Michael Kay
mike@saxonica.com
<ul><li><strong>Status</strong> changed from <i>New</i> to <i>Resolved</i></li><li><strong>Priority</strong> changed from <i>Low</i> to <i>Normal</i></li><li><strong>Applies to branch</strong> <i>9.9, trunk</i> added</li><li><strong>Fix Committed on Branch</strong> <i>9.9, trunk</i> added</li></ul><p>For 10.0 I have gone further. 10.0 has a new ErrorReporter interface superseding ErrorListener and I have added the ability to add an ErrorReporter to both XPathCompiler and XPathSelector to catch static and dynamic warnings respectively.</p>
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14088
2019-08-27T13:43:02Z
Michael Kay
mike@saxonica.com
<ul><li><strong>Tracker</strong> changed from <i>Support</i> to <i>Bug</i></li></ul>
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14098
2019-08-29T06:51:26Z
Rick Vlaming
<ul></ul><p>Thank you Michael.
I will look into the processor.getUnderlyingConfiguration().setErrorListener(....) .
And nice you gone further for 10.0.
What will be de release date for that?</p>
Saxon - Bug #4300: Getting warnings using XPathExecutable
https://saxonica.plan.io/issues/4300?journal_id=14215
2019-09-05T14:43:34Z
O'Neil Delpratt
oneil@saxonica.com
<ul><li><strong>Status</strong> changed from <i>Resolved</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li><li><strong>Fixed in Maintenance Release</strong> <i>9.9.1.5</i> added</li></ul><p>Bug fix applied in the Saxon 9.9.1.5 maintenance release.</p>