最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

xslt - Xquery integration with apache camel throws Error - Stack Overflow

programmeradmin6浏览0评论

Problem statement: Integration Apache Camel with Xquery fails

Steps:

Java 17

Added below camel dependencies to Maven project

 <dependency>
            <groupId>.apache.camel</groupId>
            <artifactId>camel-soap</artifactId>
            <version>4.10.0</version>
        </dependency>

        <dependency>
            <groupId>.apache.camel</groupId>
            <artifactId>camel-saxon</artifactId>
            <version>4.10.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.saxon</groupId>
            <artifactId>Saxon-HE</artifactId>
            <version>12.5</version> <!-- Use the appropriate Saxon version -->
        </dependency>
        <dependency>
            <groupId>.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>4.10.0</version>
        </dependency>
        <dependency>
            <groupId>.apache.camel</groupId>
            <artifactId>camel-bean</artifactId>
            <version>4.10.2</version>
        </dependency>
        <dependency>
            <groupId>.apache.camel</groupId>
            <artifactId>camel-endpointdsl</artifactId>
            <version>4.10.0</version>
        </dependency>

In Xquery variable declaration: declare variable $configXML as element() external;

From camel setting value using camel exchange object: exchange .setProperty("configXML", .w3c.dom.Document.class)

I even tried passing

  • net.sf.saxon.s9api.XdmNode

  • .w3c.dom.Element

All the above options fails with below error

Config.xml

<config>
<referenceOperation>test</referenceOperation>
</config>

Query(test.xqy) file content:

xquery version "1.0" encoding "utf-8";
declare variable $configXML as element() external;
declare function local:func($configXML as element()) as element()  {
<test>{data($configXML/referenceOperation)}</test>
};

local:func($configXML)

Routing.java

public Routing extends EndpointRouteBuilder {

    @Override
    public void configure() {

from().

                process(exchange -> {
                 
 File currentDirectory = new File(".");
        Path filePath = Path.of(currentDirectory.getCanonicalPath(), "src", "main", "resources", 
                "Config.xml");


        // Read File Contents
        String fileContent = Files.readString(filePath);
  
               
                    net.sf.saxon.s9api.Processor processor = new net.sf.saxon.s9api.Processor(false);
                    net.sf.saxon.s9api.XdmNode xmlNode = processor.newDocumentBuilder()
                            .build(new javax.xml.transform.stream.StreamSource(new java.io.StringReader(fileContent)));
                    // Map<String, String> map = new HashMap<>();


                    exchange.setProperty("config", xmlNode);

                })

.to(xquery("file:src/main/resources/test.xqy")
 .log("Xquery Output :${body}")

}

ERROR:

Caused by: net.sf.saxon.trans.XPathException: The required item type of the value of variable $configXML is element(); the supplied value (XdmNode)<config> <referenceOperatio... is an external object at net.sf.saxon.expr.ItemTypeCheckingFunction.testConformance(ItemTypeCheckingFunction.java:77) at net.sf.saxon.expr.ItemTypeCheckingFunction.mapItem(ItemTypeCheckingFunction.java:55) at net.sf.saxon.expr.ItemMappingIterator.next(ItemMappingIterator.java:161) at net.sf.saxon.expr.CardinalityCheckingIterator.<init>(CardinalityCheckingIterator.java:55) at net.sf.saxon.type.TypeHierarchy.applyFunctionConversionRules(TypeHierarchy.java:233) at net.sf.saxon.expr.instruct.GlobalParameterSet.convertParameterValue(GlobalParameterSet.java:110) at net.sf.saxon.Controller.getConvertedParameter(Controller.java:270) at net.sf.saxon.expr.instruct.GlobalParam.evaluateVariable(GlobalParam.java:71) at net.sf.saxon.expr.GlobalVariableReference.evaluateVariable(GlobalVariableReference.java:131) at net.sf.saxon.expr.GlobalVariableReference$GlobalVariableReferenceElaborator.evaluate(GlobalVariableReference.java:194) at net.sf.saxon.expr.elab.LearningEvaluator.evaluate(LearningEvaluator.java:61) at net.sf.saxon.expr.UserFunctionCall.evaluateArguments(UserFunctionCall.java:616) at net.sf.saxon.expr.UserFunctionCall$UserFunctionCallElaborator.lambda$elaborateForPush$5(UserFunctionCall.java:844) at net.sf.saxon.query.XQueryExpression.processQuery(XQueryExpression.java:499) at net.sf.saxon.query.XQueryExpression.run(XQueryExpression.java:473) at .apache.camelponent.xquery.XQueryBuilder.evaluateAsDOM(XQueryBuilder.java:227) at .apache.camelponent.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:187) ... 48 more

Please suggest us what's wrong here and how to overcome from it

发布评论

评论列表(0)

  1. 暂无评论