camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nikolay Voskresenskiy (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CAMEL-10653) XQuery support broken in Camel 2.18.x
Date Fri, 23 Dec 2016 18:30:58 GMT

    [ https://issues.apache.org/jira/browse/CAMEL-10653?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15773435#comment-15773435
] 

Nikolay Voskresenskiy commented on CAMEL-10653:
-----------------------------------------------

The external variables thing is not a feature of saxon library, it is a common feature of
XQuery 1.0 specification, and also documented at http://camel.apache.org/xquery.html. The
same test passes in camel 2.17.4

I believe the issue was caused by upgrade to saxon 9.7.

In Camel 2.17 the following code is responsible for this functionality in XQueryBuilder class:
{code}
    protected void addParameters(DynamicQueryContext dynamicQueryContext, Map<String, Object>
map, String parameterPrefix) {
        Set<Map.Entry<String, Object>> propertyEntries = map.entrySet();
        for (Map.Entry<String, Object> entry : propertyEntries) {
            dynamicQueryContext.setParameter(parameterPrefix + entry.getKey(), entry.getValue());
        }
    }
{code}

In camel 2.18 it is now:
{code}
    protected void addParameters(DynamicQueryContext dynamicQueryContext, Map<String, Object>
map, String parameterPrefix) {
        Set<Map.Entry<String, Object>> propertyEntries = map.entrySet();
        for (Map.Entry<String, Object> entry : propertyEntries) {
            dynamicQueryContext.setParameter(
                StructuredQName.fromClarkName(parameterPrefix + entry.getKey()),
                new ObjectValue(entry.getValue())
            );
        }
    }
{code}
Which apparently doesn't work, it seems the value container needs to be one of the subtypes
for net.sf.saxon.value.AtomicValue. And no, external variable declaration is not a deprecated
feature, it is part of core xquery specification and supported by all popular processors including
saxon.

Anyway, this is a regression compared to camel 2.17, and either needs to be fixed, or the
documentation on camel-xquery needs to be updated accordingly


> XQuery support broken in Camel 2.18.x
> -------------------------------------
>
>                 Key: CAMEL-10653
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10653
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-saxon
>    Affects Versions: 2.18.0, 2.18.1
>            Reporter: Nikolay Voskresenskiy
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.18.2, 2.19.0
>
>         Attachments: camel-xquery-test.zip
>
>
> The camel xquery support no longer works correctly as of 2.18.x
> I identified two main issues so far:
> # A java.lang.NullPointerException is thrown when exchange contains any null headers
or properties:
> {code}
> java.lang.NullPointerException: External object cannot wrap a Java null
> 	at net.sf.saxon.value.ObjectValue.<init>(ObjectValue.java:55)
> 	at org.apache.camel.component.xquery.XQueryBuilder.addParameters(XQueryBuilder.java:640)
> {code}
> # An error in execution whenever a header or a property are referenced in the xquery
as an external variable:
> {code}
> java.lang.AssertionError: Unknown event
> 	at net.sf.saxon.evpull.ComplexContentProcessor.advance(ComplexContentProcessor.java:198)
> {code}
> Attached is a maven project with junit test illustrating the issues.



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

Mime
View raw message