REST 代理以 属性 值响应

REST proxy to respond with property value

我有一个 属性 和 XML 字符串值。是否可以将 属性 值作为响应主体发送回客户端?如果是,有什么提示吗?

尝试使用 payloadfactory 调解器,但它似乎不适用于 XML 字符串。正如我所见,它适用于纯文本字符串,但无论如何都需要一些包装 XML 元素。

UPD

我的同事甚至在接受答案之前提供的替代解决方案是将 OM 属性 与 enrich mediator 一起使用。 类似的东西:

<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/>

使用 OM 类型定义您的 属性。

类型 'OM' 可用于在消息上下文中设置 XML 属性 值。当与 属性 中介关联的表达式在中介期间计算为 XML 节点时,这会变得很有用。将 type 属性设置为 'OM' 后,生成的 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="OM" 保存它。现在我可以使用 Xpath 获取任何元素。您可以在 payloadFactory 中使用 Xpath。

 <payloadFactory media-type="xml">
        <format>
           <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
              <soapenv:Body></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>