我对 Mule 还很陌生,所以这可能是一个愚蠢的问题。我想从 Mule 调用远程 axis2 SOAP 服务,为此我将使用 SOAP 组件。我正在努力解决的是有效负载人口的正确模式。这是一个非常简单的有效负载示例
<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="<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>" 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 中的概述读取它。问题
- 我不想为请求生成客户端 stub 类,但也许我应该使用 CXF 来定义服务类。这会带来什么好处?
还有其他首选的有效负载填充方法吗?在我的用例中,将从路由器调用此(子)流,因此我不会传递任何会更改消息的相关信息。
旁白:也许对于工作类型名称“提醒任务”,我应该提取到 mule-app.properties 并使用 XSLT 填充最终请求?
谢谢
丰富
最佳答案
为了在流中设置负载,您可以使用以下任一方法。
编写一个组件(Java bean),将 XML 请求作为字符串,然后将该字符串作为组件的返回值。该组件应该是流程中的第一个消息处理器。
编写一个组件(Java bean),将文件中的 XML 请求读取到字符串中,然后将该字符串作为组件的返回值。该组件应该是流程中的第一个消息处理器。
使用入站端点(文件或 JMS)作为流程的入口点。这些入站可以从指定的路径读取。这样您的输入就可以是动态的。并且您可以针对不同的请求多次执行该流程,而无需每次都启动 Mule 服务器。
有关 Mule 文件和 JMS 端点的更多信息,请参见以下链接。
接下来,对于工作类型名称的 XSLT 填充,可以使用 XML 模块中的 Mule XSLT Transformer。有关更多信息,请访问以下链接 Mule XSLT Transformer
希望这有帮助。
关于骡子 3.4+ : Best practice in setting the payload for static SOAP request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331761/