在WSO2 ESB中读取本地条目(XML,URL)

时间:2016-05-05 16:54:11

标签: wso2

我在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"/>

请帮忙。

3 个答案:

答案 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