Weblogic OSB-从另一个XQuery文件调用函数

Weblogic OSB-从另一个XQuery文件调用函数,weblogic,xquery,osb,Weblogic,Xquery,Osb,在Weblogic Service Bus 10g中,我有一个XQuery文件,其中包含一个函数,我希望从另一个XQuery文件的函数中使用该函数。如何在OSB中实现这一点 Projects/projectA/getMessageType XQuery: declare namespace xf = "http://tempuri.org/projectA/getMessageType/"; declare function xf:getMessageType($anyType as elem

在Weblogic Service Bus 10g中,我有一个XQuery文件,其中包含一个函数,我希望从另一个XQuery文件的函数中使用该函数。如何在OSB中实现这一点

Projects/projectA/getMessageType XQuery:

declare namespace xf = "http://tempuri.org/projectA/getMessageType/";

declare function xf:getMessageType($anyType as element())
    as xs:string {

    ...
};

declare variable $anyType as element() external;

xf:getMessageType($anyType)
import module namespace common = "http://your.site.com/common";

declare namespace xf = "http://tempuri.org/projectA/getMessageType/";
declare variable $anyType as element() external;

common:getMessageType($anyType)
项目/项目B/流程XQuery:

declare namespace xf = "http://tempuri.org/projectB/process/";

declare function xf:process($data as element())
    as element() {

    // call projectA's getMessageType($data) here!!!
    ...
};
import module namespace common = "http://your.site.com/common";

declare namespace xf = "http://tempuri.org/projectB/process/";

declare function xf:process($data as element())
    as element() {

    common:getMessageType(data)
    ...
};
提前感谢,,
PM

您需要将
xf:getMessageType
函数从
projectA
播放到库模块中,而不是主模块中。然后可以导入库模块

考虑以下情况:

Projects/projectA/getMessageType XQuery:

declare namespace xf = "http://tempuri.org/projectA/getMessageType/";

declare function xf:getMessageType($anyType as element())
    as xs:string {

    ...
};

declare variable $anyType as element() external;

xf:getMessageType($anyType)
import module namespace common = "http://your.site.com/common";

declare namespace xf = "http://tempuri.org/projectA/getMessageType/";
declare variable $anyType as element() external;

common:getMessageType($anyType)
项目/项目B/流程XQuery:

declare namespace xf = "http://tempuri.org/projectB/process/";

declare function xf:process($data as element())
    as element() {

    // call projectA's getMessageType($data) here!!!
    ...
};
import module namespace common = "http://your.site.com/common";

declare namespace xf = "http://tempuri.org/projectB/process/";

declare function xf:process($data as element())
    as element() {

    common:getMessageType(data)
    ...
};
项目/common/common.xqy

module namespace common = "http://your.site.com/common";

declare function common:getMessageType($anyType as element())
    as xs:string {

    ...
};

您可能需要将
at
语句添加到
import module
语句中,指定公共库模块的文件位置,但我不确定这在WebLogic OSB中会是什么样子。

嗨,Adam,谢谢您的回答。您完全正确,将函数放入库模块就可以实现这一点。我只是想知道是否有可能直接导入另一个XQuery文件的功能,因为这是一个系统中的小更新要求,该系统目前仅处于维护模式,正在逐步淘汰(因此不需要创建模块并更新每个流来使用它)。恐怕不行,XQuery规范规定只能从
库模块
导入函数,不能从
主模块
导入函数。