REST代理以响应属性值

时间:2015-12-01 18:27:55

标签: wso2 wso2esb

我有一个XML字符串值的属性。是否可以将属性值作为响应主体发送回客户端?如果有,任何提示如何做到这一点?

尝试使用payloadfactory介体,但它似乎不适用于XML字符串。我认为它适用于纯文本字符串,但无论如何都需要一些包装XML元素。

UPD

我的同事甚至在接受答案之前提供的替代解决方案是使用OM属性和富集调解员。 这样的事情:

<property name="messageType" scope="axis2" type="STRING" value="application/xml"/>
<property expression="get-property('myProperty')" name="omProperty" scope="default" type="OM"/>
<enrich description="">
  <source clone="true" property="omProperty" type="property"/>
  <target type="body"/>
</enrich>
<respond/>

1 个答案:

答案 0 :(得分:1)

使用类型OM定义属性。

键入&#39; OM&#39;可用于在消息上下文中设置XML属性值。当在调解期间与属性介体关联的表达式求值为XML节点时,这将非常有用。将type属性设置为&#39; OM&#39;生成的XML将在转让给属性之前转换为AXIOM OMElement。

例如:

我的xml:

<config>
    <crm>
        <crmUsernamePassword>username:password</crmUsernamePassword>
    </crm>
</config>

我的财产:

 <property name="config" expression="get-property('conf:/config.xml')" scope="default" type="OM"/>
 <property name="crmUsernamePassword" expression="$ctx:config//crm/crmUsernamePassword" scope="default"
                  type="STRING"/>

在这个例子中,我得到一个属性并用type =&#34; OM&#34;保存它。现在我可以使用Xpath来获取任何元素。你可以在payloadFactory中使用Xpath。

 <payloadFactory media-type="xml">
        <format>
           <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
              <soapenv:Body>$1</soapenv:Body>
           </soapenv:Envelope>   
        </format>
        <args>
            <arg expression="$ctx:config" />
        </args>
 </payloadFactory>
 <property name="ContentType" value="application/xml" scope="axis2" type="STRING"/>

结果:

<config>
    <crm>
        <crmUsernamePassword>username:password</crmUsernamePassword>
    </crm>
</config>