Stephan Siano created CAMEL-8273:
------------------------------------

             Summary: More flexible selection of default documentType in XPath 
expressions
                 Key: CAMEL-8273
                 URL: https://issues.apache.org/jira/browse/CAMEL-8273
             Project: Camel
          Issue Type: Improvement
          Components: camel-core
    Affects Versions: 2.15.0
            Reporter: Stephan Siano


In the current implementation of XPath if no documentType is defined (likely in 
most cases) the document used for XPath evaluation is parsed into a (DOM) 
Document using the JDK XML parser before applying the XPath expression on it.

For large documents this might be resource intensive, especially if the XPath 
is evaluated using a more efficient parser like Saxon.

With the current implementation it is possible to workaround this by setting a 
documentType attribute to the XPath expression, but doing this efficiently 
requires some internal knowledge about the previous component in the camel 
route (which type it creates) and the qualities of the used XML parser (e.g. 
the JDK parser accepts only InputSource and Node as input types for XPath 
evaluation whereas Saxon does also support other types like SAXSource).

The attached patch will make the data type used by default for XPath evaluation 
more flexible (depending on the type of the input).

There are two cases to differentiate:
documentType is set on the XPath expression:
current implementation:
1. try to convert to the documentType
2. if that fails do some extra conversions for some additional data types 
(WrappedFile, BeanInvocation, String)
3. if that fails throw an exception
new implementation:
1. try to convert to the documentType
2. if that fails, use the message if it is of type Node, InputSource or 
DOMSource or do some type conversions for specific data types (WrappedFile, 
BeanInvocation, String, InputStream, Reader, byte[]...)
3. if that fails throw an exception

documentType is not set on the XPath expresson
old implementation:
this is actually the same as if documentType was set to Document
new implementation:
1. Use the message if it is of type Node, InputSource or DOMSource or do some 
type conversions for specific data types (WrappedFile, BeanInvocation, String, 
InputStream, Reader, byte[]...) (to InputSource)
2. If the old message is not of one of the types above, convert to DOM Document
3. If this fails throw an Exception



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to