我在WSO2 WSB4.9.0下面配置了两个本地条目,如何读取代理或序列中的节点值。
内联XML本地条目
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="test" xmlns="http://ws.apache.org/ns/synapse">
<list>
<flag>a</flag>
<path>b</path>
</list>
</localEntry>
和
来源网址
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="sample" src="file:/C:/Apache24/bin/ApacheMonitor" xmlns="http://ws.apache.org/ns/synapse"/>
请帮忙。
答案 0 :(得分:3)
如果条目在文件系统中,您可以使用:
<property name="testProp" expression="get-property('test')" scope="default" type="STRING"/>
和
<property name="sampleProp" expression="get-property('sample')" scope="default" type="STRING"/>
如果要访问XML中的值,请设置OM类型:
<property name="testProp" expression="get-property('test')" scope="default" type="OM"/>
<log level="custom">
<property expression="$ctx:testProp" name="FullValue" />
<property expression="$ctx:testProp//tt:flag" name="flagValue" xmlns:tt="http://ws.apache.org/ns/synapse"/>
<property expression="$ctx:testProp//tt:path" name="pathValue" xmlns:tt="http://ws.apache.org/ns/synapse"/>
</log>
我的完整代理:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="testProxy6"
transports="https http"
startOnLoad="true"
trace="disable">
<target>
<inSequence>
<property name="testProp" expression="get-property('test')" scope="default" type="OM"/>
<log level="custom">
<property expression="$ctx:testProp" name="FullValue" />
<property expression="$ctx:testProp//tt:flag" name="flagValue" xmlns:tt="http://ws.apache.org/ns/synapse"/>
<property expression="$ctx:testProp//tt:path" name="pathValue" xmlns:tt="http://ws.apache.org/ns/synapse"/>
</log>
<respond/>
</inSequence>
<outSequence>
<log level="full">
<property value="SEQUENCE: " name="OUT"/>
</log>
<send/>
</outSequence>
</target>
</proxy>
我在文件test.xml中的本地条目:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="test" xmlns="http://ws.apache.org/ns/synapse">
<list>
<flag>a</flag>
<path>b</path>
</list>
</localEntry>
我的日志输出:
[2016-05-11 12:21:30,999] INFO - LogMediator FullValue = <list xmlns="http://ws.apache.org/ns/synapse">
<flag>a</flag>
<path>b</path>
</list>, flagValue = a, pathValue = b
答案 1 :(得分:0)
如果您需要从本地条目中的xml获取值,首先您必须将xml内容放入属性并将其类型设置为OM,如下所示。
<property expression="get-property('xmlLocalEntrySample')" name="xmlTest" scope="default" type="OM"/>
现在,从消息上下文中,您可以像这样读取属性值。这里 $ ctx 是Synapse Message-Context属性的前缀,并使用此属性获取默认范围内的属性。如果您记录 testFlagA 和 testPath 的值,则可以分别在控制台中看到 a 和 b 。 / p>
<property expression="$ctx:xmlTest//*[local-name()='flag']" name="testFlagA"/>
<property expression="$ctx:xmlTest//*[local-name()='path']" name="testPath"/>
答案 2 :(得分:0)
对我来说,get-property不适用于本地条目,而xslt中介器可以很好地工作。 ie6.4