Mule 3.4:为静态SOAP请求设置有效负载的最佳实践

我对Mule很新,所以这可能是一个愚蠢的问题.我想从Mule调用远程axis2 SOAP服务,为此我将使用SOAP组件.我正在努力的是PAYLOAD人口的正确模式.这是一个非常简单的有效负载示例

  <oper:CreateTask xmlns:oper="http://api.abc.com/workflow/operationtypes">
     <workType>
        <Name>Reminder Task</Name>
     </workType>
     <activitySubject>
        <GenericSubject>Richard Fanning</GenericSubject>
     </activitySubject>
     <description>This is a Mule generated Reminder Task</description>
  </oper:CreateTask>

当前正通过set-payload转换器填充有效负载,并且XML嵌入在流中,如下所示

<flow name="createWorkflowTask" doc:name="createWorkflowTask">
    <set-payload value="&lt;oper:CreateTask xmlns:oper=&quot;http://api.abc.com/workflow/operationtypes&quot;&gt;&lt;workType&gt;&lt;Name&gt;Reminder Task&lt;/Name&gt;&lt;/workType&gt;&lt;activitySubject&gt;&lt;GenericSubject&gt;Richard Fanning&lt;/GenericSubject&gt;&lt;/activitySubject&gt;&lt;description&gt;This is a Mule generated Reminder Task&lt;/description&gt;&lt;/oper:CreateTask&gt;" doc:name="Set Payload"/>
    <cxf:proxy-client doc:name="SOAP" enableMuleSoapHeaders="true" payload="body"/>
    <http:outbound-endpoint exchange-pattern="one-way" method="POST" address="http://localhost:6081/workflow/services/ActivityServices" doc:name="HTTP"/>
</flow>

我的问题是设置此有效负载的最合适方式.我的想法是

>如果PAYLOAD更大,那么将这个XML保存在Mule项目的文件中并按照this问题中的概述阅读它会更好
>我不想为Request生成客户端存根类,但也许我应该使用CXF来定义服务类.这会带来什么好处?

是否有其他首选的有效载荷数量方法.在我的用例中,这个(子)流将从路由器调用,所以我不会传递任何会改变消息的相关信息.

旁白:也许对于工作类型名称“提醒任务”我应该提取到mule-app.properties并使用XSLT填充最终请求?

谢谢

丰富

最佳答案 要在流中设置有效负载,可以使用以下任一方法.

>编写一个组件(Java bean),它将XML请求作为String,然后将该字符串作为组件返回.此组件应该是流中的第一个消息处理器.
>编写一个组件(Java bean),它将XML请求从文件读取到String中,然后将该String作为组件的返回值.此组件应该是流中的第一个消息处理器.
>使用入站端点(文件或JMS)作为流的入口点.这些入站可以从指定的路径读取.这样您的输入就可以是动态的.并且您可以针对不同的请求多次执行流程,而无需每次都启动Mule服务器.

有关Mule文件和JMS端点的更多信息,请参见以下链接.

Mule JMS Transport Reference

Mule File Endpoint

接下来,对于工作类型名称的XSLT填充,可以使用XML模块中的Mule XSLT Transformer.更多相关信息,请参见以下链接Mule XSLT Transformer

希望这可以帮助.

点赞