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

时间:2013-08-20 09:38:26

标签: mule

我对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>

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

  1. 如果PAYLOAD较大,最好将此XML保存在Mule项目的文件中,并按照this问题
  2. 中的说明进行阅读
  3. 我不想为Request生成客户端存根类,但也许我应该使用CXF来定义服务类。这会带来什么好处?
  4. 是否有其他首选的有效载荷数量方法。在我的用例中,这个(子)流将从路由器调用,所以我不会传递任何会改变消息的相关信息。

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

    由于

1 个答案:

答案 0 :(得分:2)

要在流中设置有效负载,您可以使用以下任一方式。

  1. 编写一个组件(Java bean),它将XML请求作为String,然后将该字符串作为组件的返回值。该组件应该是您流程中的第一个消息处理器。

  2. 编写一个组件(Java bean),它将XML请求从文件读取到String中,然后将该String作为组件的返回值。该组件应该是您流程中的第一个消息处理器。

  3. 使用入站端点(文件或JMS)作为流的入口点。这些入站可以从指定的路径读取。这样您的输入就可以是动态的。并且您可以针对不同的请求多次执行流程,而无需每次都启动Mule服务器。

  4. 有关以下链接中的Mule文件和JMS端点的更多信息。

    Mule JMS Transport Reference

    Mule File Endpoint

    接下来,对于工作类型名称的XSLT填充,可以使用XML模块中的Mule XSLT Transformer。有关详情,请参阅以下链接Mule XSLT Transformer

    希望这有帮助。