首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CORB:未定义的外部变量fn:QName("","URI")

CORB:未定义的外部变量fn:QName("","URI")
EN

Stack Overflow用户
提问于 2021-09-07 17:29:40
回答 2查看 120关注 0票数 2

我对CORB很陌生,尝试用Java代码删除文档,但我得到了com.marklogic.xcc.exceptions.XQueryException: XDMP-EXTVAR: (err:XPDY0002) declare variable $URI as xs:string* external; -- Undefined external variable fn:QName("","URI")异常。

在我的java项目中,我使用CORB 2.5.0作为maven依赖项。

URIS_MODULE是get-uri.xql

代码语言:javascript
复制
xquery version "1.0-ml";
let $uris := cts:uris()
return (count($uris), $uris)

进程-模块是transform-docs.xqy

代码语言:javascript
复制
xquery version "1.0-ml";
declare variable $URI as xs:string* external;
xdmp:document-delete($URI)

下面是执行模块的java代码,

代码语言:javascript
复制
    Properties properties = new Properties();
    properties.setProperty(Options.XCC_CONNECTION_URI, "xcc://admin:admin-password@localhost:8061/test");
    properties.setProperty(Options.THREAD_COUNT, Integer.toString(8));
    properties.setProperty(Options.PROCESS_MODULE, "src/test/resources/transform-docs.xqy.xqy|ADHOC");
    properties.setProperty(Options.URIS_MODULE, "src/test/resources/get-uri.xqy|ADHOC");
    properties.setProperty(Options.MODULES_DATABASE, "8061-test-modules");

    Manager executor = new Manager();
    executor.init(properties);
    executor.run();

在执行上述代码后,我将收到此警告,并且代码将永远执行,

代码语言:javascript
复制
    Warning at char 9 in xsl:with-param/@select on line 106 column 123 of jobStatsToJson.xsl:
  FODC0002: I/O error reported by XML parser processing
  jar:file:/C:/Users/Shivling%20Bhandare/.m2/repository/com/marklogic/marklogic-corb/2.5.0/marklogic-corb-2.5.0.jar!/: no entry name specified
Warning at char 9 in xsl:with-param/@select on line 107 column 118 of jobStatsToJson.xsl:
  FODC0002: Document has been marked not available:
  jar:file:/C:/Users/Shivling%20Bhandare/.m2/repository/com/marklogic/marklogic-corb/2.5.0/marklogic-corb-2.5.0.jar!/jobStatsToJson.xsl

更新这个错误是通过更改CoRB版本来实现的,但是现在我得到了这个异常,

最新代码是

代码语言:javascript
复制
        Properties properties = new Properties();
        properties.put(Options.PROCESS_MODULE, "src/test/resources/transform-docs.xqy");
        properties.put(Options.URIS_MODULE, "src/test/resources/get-uris.xqy");
        properties.put(Options.THREAD_COUNT, "20");
        properties.put(Options.MODULE_ROOT, "/");
        properties.put(Options.MODULES_DATABASE, "8067-TCOMP-modules");
        properties.put(Options.INSTALL, "1");
        properties.put(Options.XCC_DBNAME, "TCOMP");
        properties.put(Options.XCC_PORT, "8067");
        properties.put(Options.XCC_HOSTNAME, "localhost");
        properties.put(Options.XCC_USERNAME, "admin");
        properties.put(Options.XCC_PASSWORD, "admin");

        Manager manager = new Manager();
        manager.init(properties);
        manager.run();

通过更改CoRB版本,上面提到的错误已经消失了,但是现在我

代码语言:javascript
复制
WARNING: Connection error count for ContentSource user=admin, cb=TCOMP [provider: address=localhost/127.0.0.1:8067, pool=1/64] is 1. Max limit is 3.
Sep 08, 2021 12:09:26 PM com.marklogic.developer.corb.DefaultContentSourcePool$SessionInvocationHandler invoke
WARNING: Submit request failed 1 times with ServerResponseException. Max Limit is 3. Retrying..
Sep 08, 2021 12:09:26 PM com.marklogic.developer.corb.DefaultContentSourcePool get
WARNING: Connection failed for ContentSource user=admin, cb=TCOMP [provider: address=localhost/127.0.0.1:8067, pool=1/64]. Waiting for 60 seconds before retry attempt 2

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-07 23:24:44

如果要运行CoRB作业,则需要使用Manager类。

有关示例,请参阅此集成测试:https://github.com/marklogic-community/corb2/blob/master/src/test/java/com/marklogic/developer/corb/ManagerIT.java#L100

ModuleExecutor类用于执行单个主模块。

PROCESS-MODULE管理器和ModuleExecutor都是以类似的方式配置的,具有相同的属性,因此ModuleExecutor试图执行已配置的ModuleExecutor,并且由于您的外部变量$URIS没有默认值,因此会引发一个错误。

票数 2
EN

Stack Overflow用户

发布于 2021-09-08 07:01:39

谢谢你,麦德斯·汉森,如果没有你的意见不可能解决这个问题,

完全解决办法是,

Corb verions使用

代码语言:javascript
复制
        <dependency>
            <groupId>com.marklogic</groupId>
            <artifactId>marklogic-corb</artifactId>
            <version>2.4.0</version>
        </dependency>

XCC verion使用

代码语言:javascript
复制
        <dependency>
            <groupId>com.marklogic</groupId>
            <artifactId>marklogic-xcc</artifactId>
            <version>10.0.6</version>
        </dependency>

属性和管理器配置

代码语言:javascript
复制
        Properties properties = new Properties();
        properties.put(Options.PROCESS_MODULE, "src/test/resources/transform-docs.xqy|ADHOC");
        properties.put(Options.URIS_MODULE, "src/test/resources/get-uris.xqy|ADHOC");
        properties.put(Options.THREAD_COUNT, "20");
        properties.put(Options.MODULE_ROOT, "/");
        properties.put(Options.MODULES_DATABASE, "8067-test-modules");
        properties.put(Options.INSTALL, "1");
        properties.put(Options.XCC_DBNAME, "test");
        properties.put(Options.XCC_PORT, "8067");
        properties.put(Options.XCC_HOSTNAME, "localhost");
        properties.put(Options.XCC_USERNAME, "admin");
        properties.put(Options.XCC_PASSWORD, "admin");

        Manager manager = new Manager();
        manager.init(properties);
        manager.run();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69092379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档