我有一个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/>
答案 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>