我有一个关于Mule ESB以及如何操纵对传入SOAP请求的响应的问题。
用例场景是这样的:
传入SOAP请求 - >接收请求并发送到异步流程进行处理 - >将Mule事务的消息ID返回给SOAP响应中的调用者 - > (继续原始请求的异步处理)
在这种情况下,SOAP请求处理的重新开始与调用者无关。
<flow name="asyncTestFlow1" doc:name="asyncTestFlow1">
<http:inbound-endpoint exchange-pattern="request-response"
host="localhost" port="8088" doc:name="HTTP" />
<logger message="F1: messageID:#[message:id]" level="INFO" />
<async doc:name="Async">
<flow-ref name="asyncTestFlow2" doc:name="Flow Reference" />
</async>
<!-- ### need to modify the request, add the message ID and send back to the client ### -->
</flow>
<flow name="asyncTestFlow2">
<cxf:proxy-service payload="body" soapVersion="1.2" doc:name="SOAP" />
<logger message="after cxf:proxy-service -> #[groovy:payload.getClass()]" level="INFO" />
<cxf:proxy-client payload="body" enableMuleSoapHeaders="true" soapVersion="1.2" doc:name="SOAP" />
<http:outbound-endpoint exchange-pattern="request-response"
address="http://example.net/KnowYourClient/KYCService"
doc:name="HTTP" />
<logger message="SOAP response: #[payload:java.lang.String]" level="INFO" />
</flow>
在第9行附近,我添加了一条评论,我想修改请求/响应的有效负载。我在想我需要一个自定义的消息转换器,但我不知道从哪里开始。我可以将输入作为ContentLengthInputStream(默认传入)或DepthXMLStreamReader(在调用cxf:proxy-service之后)。我认为在XML格式中操作会更容易。
有人可以指出我如何开始操作XML内容的正确方向吗?
- 更新 - 现在的工作示例
我想我现在正在使用它...关键是再见数组转换器的初始对象,它允许在私有流中使用传入消息。
<flow name="asyncTestFlow1" doc:name="asyncTestFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8088" doc:name="HTTP" />
<object-to-byte-array-transformer />
<logger message="F1: messageID:#[message:id]" level="INFO" doc:name="Logger" />
<async doc:name="Async">
<flow-ref name="asyncTestFlow2" doc:name="Flow Reference" />
</async>
<custom-transformer class="org.mule.examples.hello.SoapResponseTransformer" doc:name="Java" />
</flow>
<flow name="asyncTestFlow2" doc:name="asyncTestFlow2">
<cxf:proxy-service payload="body" soapVersion="1.2" doc:name="SOAP"/>
<cxf:proxy-client payload="body" enableMuleSoapHeaders="true" soapVersion="1.2" doc:name="SOAP"/>
<http:outbound-endpoint exchange-pattern="request-response"
address="http://.../Service"
doc:name="HTTP" />
<logger message="SOAP response: #[payload:java.lang.String]" level="INFO" doc:name="Logger" />
</flow>
答案 0 :(得分:0)
您也可以使用invisible(lapply(as.data.frame(t(mapping)), function (x) {
DATA$path <<- gsub(x[1],x[2],DATA$path)
}))
head(DATA)
代替<object-to-string-transformer doc:name="Object to String"/>