如何将 属性 值转换为 WSOESB 代理服务中消息的标记名称

How to convert property value to tag name of message in WSOESB proxy service

我对代理的请求非常简单

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
         <operation>GetAllCustomers</operation>     
    </soapenv:Body>
</soapenv:Envelope>

我必须将其转换为

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Body>
            <sr:GetAllCustomers />
      </soapenv:Body>
</soapenv:Envelope>

可以使用列表 xslt、payload 或 script 中的一个中介来实现逻辑,我已经使用 [=37 解决了问题=]payload mediator,但我还是很好奇,是否有办法使用enrich mediator[=40] =]?

有我的想法,我必须提取操作名称并将操作名称的值设置为属性,然后将其作为元素注入到消息中。实际上我有或用新的操作标签替换操作标签或从原始消息中删除操作标签并附加名称为 属性 操作名称值的子元素。

这样我尝试将 属性 类型设置为 "OM"。

<property name="operation" expresstion="//operation" type="OM" />
<enrich>
    <source clone="true" xpath="get-property('operation')" />
   <target type="body" />
</enrich> 

它导致解析错误,因为 type="OM" 只能分配给带有标签的 属性。例如

 <property name="operation" expression="//operation" type="OM">
     <result />
 </property>

或者我可以尝试使用 enrich mediator 注入通常的 属性 并且有几种语法方法可以实现它

<enrich>
    <source clone="true" type="property" property="operation" />
    <target type="body" action="child" />
</enrich>

<enrich>
    <source clone="true" xpath="$ctx:operation" />
    <target type="body" action="child" />
</enrich>

在这种情况下,我得到错误 "Invalid object type"。

感谢任何建议。

IMO 如果您使用 payloadFatory 解决了问题,那么您就完成了。这就是要走的路。你也可以使用脚本中介。但 payloadFactory 比那更好。 payload factory 是内容感知中介。是否也有助于构建消息。