Subjects
Home
Xalan extension functions
Fomatting question serializing DOM with pretty print
xalan with pull parser
Cannot find the declaration
Apache Xalan drop support to run on JRE 1 1 x
Why does Doctype change processing of a document
Node set to XML string via Java extensions in Xalan J: possible?
Templates/Transformers + thread safety???
Problem evaluating xpath with muliple prefix with different namespace
remove an arbitrary attribute from xsl output
Xalan3 XSLT 2 0 XPath 2 0 support?
Problem using compiled translets with Xalan !!
Xalan and jstl 1 1 problem with transform tag
NullPointer in DOM2DTM getLocalName
URIResolvers base parameter with xsltc and cascaded imports
Performance problem for Xalan J on intel dual core
Standard libraries in JAXP?
Serializing a DOM tree to XML file, customize entities replacement
Library Conflict Involving BCEL Library
A question on how users are using <xsl:message >
Kevin Cormier as a new Apache Xalan J committer
Struggling to iterate over tokenized string
Xalan count() trouble
Problem with recursive xpath
Error when switching to java 1 5
document( ' ')
Problem with Xalan2 7 0 transformation
cr/lf options
entity encoded XML
can xalan transform 2 xml using one xslt?
Xalan J JIRA defect review Monday October 16, 2006 from 2:00 to 3:30 pm ED
xsl transform with cdata section elements
xslt parameters not expanded
Weird behavior of XPath evaluate()
How to avoid <xsl:message > instruction prints stylesheet file informations ?
Cannot find SimpleTransform subdirectory after installing Xalan J
recover from document not found exceptions
jdk1 5 and Xalan jar differences?
Performance Issue
Error/Bug adding floating point numbers
XPathAPI: eval exp using nodes with default namespace
modifying xalan to output invalid XML
NullPointerException
mege two separate xml nodes into one
Is this a XALAN document identification bug?
is StylesheetRoot really java io Serializable ?
transform() fails for DOMSource but succeeds for StreamSource
Thoughts on Transformer parameter passing
HELP, Xalan and jstl 1 1 problem with transformer
Problem with XPath namespace axis?
string utils:replace deleting search string if replacement string is an HTML
help with enumeration values pls
xalan 2 5 1 vs 2 7 performance question
How to insert/update in XML document
HTML Serialization and Handling of Ampersands in HREF Attributes
XHTML link tag stripping
SystemId Unknown; Line #24; Column #49; java lang NullPointerException
xpath text() help
Apostrophe problem with xalan 2 7 0
How to set variables in XML document?
Links
Home
Oracle database error code ...
 
Search:  
Power your search with and, or, +, -, or "some phrase" operators.
Problem with recursive xpath

Problem with recursive xpath

2006-09-26       - By Rhys Parry
Reply:     1     2     3     4     5  

Kevin,

Thanks for getting back so quickly.
First the questions:
>> but I'm assuming that's just a typo
Yes, this  is an email typo.  Note that changing the order of the nodes does
not effect the behaviour.  It is always the case that the first element is
successful and the 2nd element fails.  Always.

>>what version of Xalan are you using?
Latest and greatest.  From the Manifest:
Name: org/apache/xalan/
Comment: Main Xalan engine implementing TrAX/JAXP
Specification-Title: Java API for XML Processing
Specification-Vendor: Sun Microsystems Inc.
Specification-Version: 1.3
Implementation-Title: org.apache.xalan
Implementation-Version: 2.7.0
Implementation-Vendor: Apache Software Foundation
Implementation-URL: http://xml.apache.org/xalan-j/

Note that I also downloaded the dependencies with this build.

I think the issue is in the way that the DTMManagerDefault caches pre-parsed
xml.  But this is just a thought as I am not familiar with the overall
architecture.

>>Can you provide some more Java code showing how you are getting
converterAdditionalMappingNode?
The java code is an xmlbeans type object:
org.w3c.dom.Node converterAdditionalMappingNode = nodeGroupType
.getFieldMappingArray(someInt).getConverterAdditionalMapping().getDomNode();

I then do the xpath:
XPathFactory xpathfactory= XPathFactory.newInstance();
XPath xpath  = xpathfactory.newXPath();
//Note that the text() query is simplified behaviour.
String lookupConstant = (String)xpath.evaluate("text()",
converterAdditionalMappingNode, XPathConstants.STRING);

Now, the funny thing about this is that the code runs fine for the first node
always.  It is only when we unmarshal the second node that the error occurs.
This is why I think that there is a caching issue.

The solution was for me to move the xpath expressions/objects up the class call
stack.  I am not super happy about this as I now have to cache an xpath object,
the XMLBeans object(s) as well as a document object created using the XMLBeans
objects raw xml files.  It works.  Which again leads me to believe that the
problem is some sort of cache issue.

The new code looks like:
Node converterAdditionalMappingNode = ((Node)stepConfigXPath.evaluate("/
/FieldMapping[@(protected)='someID']/ConverterAdditionalMapping", configDocument,
XPathConstants.NODE));

I then call (down in the call stack):
String lookupConstant = (String)xpath.evaluate("text()",
converterAdditionalMappingNode, XPathConstants.STRING);      

This works everytime.

If this is not enough info please write back.  I can put something together for
you if you need but it will take me a few.   Right now I gotta get the kids.

Again, thank you for the swift reply,
Rhys






-----Original Message-----
From: Kevin Cormier [mailto:kcormier@(protected)]
Sent: September 26, 2006 4:24 PM
To: Rhys Parry
Cc: xalan-j-users@(protected)
Subject: Re: Problem with recursive xpath


Hi Rhys,

I had a look at this problem, and the only mistake I noticed was that
content attribute of the first LookUpInfo element is missing the closing
quotation mark - but I'm assuming that's just a typo in  your e-mail.

It looks like this may be a bug in Xalan, but we'd need some more
information to reproduce it.  Can you provide some more Java code showing
how you are getting converterAdditionalMappingNode?  Ideally, put together
the simplest Java program and input XML file that shows this problem.  Also
- what version of Xalan are you using?

Thanks,

Kevin Cormier
Software Developer, XSLT Development
IBM Toronto Lab, D1-107
Phone: 905-413-5771
E-mail:  kcormier@(protected)



            "Rhys Parry"
            <rparry@(protected)
            .com>                                                      To
                                      <xalan-j-users@(protected)>
            09/26/2006 11:32                                           cc
            AM
                                                                  Subject
                                      Problem with recursive xpath










All,

I am getting the error: java.lang.RuntimeException: Could not resolve the
node to a handle
The error is very odd as it runs the first node successfully but throws an
exception on the second node, regardless of which node is executed ( I
moved the xml nodes around in the XML file).

Basically the program is parsing 2 files.  I file is the xml client data
(No problems even though I traverse the tree up and down) and the other is
an xml config file with xpath expressions in it.  An example of the xml I
am trying to run is (this is the xml config file):
<!-- Runs fine -->
<FieldMapping identifier="1.SubmissionType"
xpath="SubmissionTypeCode/text()"
converter="com.infoterra.grantium.service.integration.datamapper.converters
.impl.LookupConverter">

            <ConverterAdditionalMapping>
                        <LookUpInfo constant="SF424_SUBMISSION_TYPE/>
            </ConverterAdditionalMapping>
</FieldMapping>

<!-- exception is thrown -->
<FieldMapping identifier="2.ApplicationType"
xpath="ApplicationTypeCode/text()"
converter="com.infoterra.grantium.service.integration.datamapper.converters
.impl.LookupConverter">

            <ConverterAdditionalMapping>
                        <LookUpInfo constant="SF424_APPLICANT_TYPE"/>
            </ConverterAdditionalMapping>
</FieldMapping>

The java code that is calling the xpath is:
//Note that this is recreated for every node.  Is this part of the
problem?????
XPathFactory xpathfactory= XPathFactory.newInstance();

XPath xpath  = xpathfactory.newXPath();

//converterAdditionalMappingNode is the <ConverterAdditionalMapping> node
String lookupConstant = (String)xpath.evaluate("LookUpInfo/@(protected)",
converterAdditionalMappingNode, XPathConstants.STRING);


Note that I have XMLBean'ed the config file so that I can traverse it with
objects, however the <ConverterAdditionalMapping> node is supposed to be
client specific and therefore cannot be XMLBean'ed.

Why is there a problem with this?
The stack trace is:
Caused by: java.lang.RuntimeException: Could not resolve the node to a
handle
            at
org.apache.xml.dtm.ref.DTMManagerDefault.getDTMHandleFromNode(DTMManagerDefault
.java:625)

            at
org.apache.xpath.XPathContext.getDTMHandleFromNode(XPathContext.java:220)
            at org.apache.xpath.XPath.execute(XPath.java:274)
            at org.apache.xpath.jaxp.XPathImpl.eval(XPathImpl.java:210)
            at
org.apache.xpath.jaxp.XPathImpl.evaluate(XPathImpl.java:275)
            at
com.infoterra.grantium.service.integration.datamapper.converters.impl
.LookupConverter.convertSimpleData(LookupConverter.java:48)

            ... 27 more

I am trying to create a work around for now, but this will become a much
larger issue once the client configs become increasingly complicated.


Thanks in advance for any and all advice,
Rhys Parry
Product Development

Infoterra Inc. - Leadership in Enterprise Grants Management (EGM) Solutions
Phone #: 613-230-7890 Ext: 239
Fax #: 613-230-5243