我正在设计一个包含 XQuery 转换的代理服务序列。我在引用包含转换的注册表文件时遇到问题。
这是顺序:
<sequence name="MySequence" xmlns="http://ws.apache.org/ns/synapse" >
<xquery key="conf:/wsdl/xqueryRequest.xq"
target="..."
xmlns:ns="http://org.apache.synapse/xsd" >
<variable xmlns:ns2="http://..." name="var1" expression="..." type="ELEMENT" />
</xquery>
<send>
<endpoint>...</endpoint>
</send>
</sequence>
包含 XQuery 转换的文件上传到
/_system/config/wsdl/xqueryRequest.xq
这是我得到的例外:
WARN ERROR_DETAIL:org.apache.synapse.SynapseException: 无法执行查询 org.apache.synapse.mediators.xquery.XQueryMediator.handleException(XQueryMediator.java:627) 在 org.apache.synapse.mediators.xquery.XQueryMediator.mediate(XQueryMediator.java:130) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60) 在 ... 引起:java.lang.NullPointerException at org.wso2.carbon.mediation.registry.WSO2Registry.lookup(WSO2Registry.java:177) 在 org.apache.synapse.registry.AbstractRegistry.getResource(AbstractRegistry.java:63) 在 org.apache.synapse.config.SynapseConfiguration.getEntry(SynapseConfiguration.java:693) 在 org.apache.synapse.core.axis2.Axis2MessageContext.getEntry(Axis2MessageContext.java:194) 在 org.apache.synapse.mediators.xquery.XQueryMediator.performQuery(XQueryMediator.java:233) 在 org.apache.synapse.mediators.xquery.XQueryMediator.mediate(XQueryMediator.java:123) ... 11 更多
异常在 WSO2Registry.lookup 处显示 NullPointer,因此我认为问题在于在注册表中查找 XQuery 文件,这部分:
key="conf:/wsdl/xqueryRequest.xq"
该文档显示了两个带有 XQuery 转换的代码片段(390和391),但没有一个说明如何引用 XQuery 文件。
问题:关键参数的正确值应该是多少?我需要使用“本地输入”功能吗?如果是,那么我应该将值定义为“内联 XML 条目”还是“内联文本”?
2012 年 3 月 23 日更新:
问题 2 :也许是一个更简单的问题:当我将 Xquery 中介的关键字段设置为key="xqueryRequest.xq"时,我应该在哪里复制/上传 xqueryRequest.xq 文件?