我有一个使用Jersey REST组件的mule流程
<flow name="rest-api" doc:name="rest-api">
<http:inbound-endpoint exchange-pattern="request-response"
host="localhost" path="rest" port="8081" doc:name="HTTP" />
<logger message="Message !!!!!!!! #[payload]" level="INFO"
doc:name="Logger" />
<jersey:resources doc:name="REST">
<component class="com.test.api.TestAPI" />
</jersey:resources>
<logger message="Message $$$$$$$ #[payload]" level="INFO" doc:name="Logger" />
</flow>
过去的球衣组件的对象是“org.mule.module.jersey.MuleResponseWriter”类型
如何处理此有效负载?我需要使用该消息并在返回调用者之前对消息进行一些处理。
参考:http://www.mulesoft.org/documentation/display/current/Jersey+Module+Reference
将泽西回复发送给其他流程
如果您想要将您的球衣组件的请求转换或发送到下一个资源/流程,那么您需要使用
ContainerResponse cr = (ContainerResponse) message.getInvocationProperty("jersey_response");
String messageString = (String) cr.getResponse().getEntity();
message.setPayload(messageString);
这会将org.mule.module.jersey.MuleResponseWriter $ 1类型转换为String,您可以将其转发到下一个资源。
答案 0 :(得分:5)
注意:OP已对此问题进行了大量审核(请参阅history),因此此答案现在看起来已断开连接。这个答案解释了Jersey资源如何与其他流程进行交互。
要从资源中调用其他流,您可以:
MuleContextAware
,然后使用MuleClient执行调用。这是APIkit正在解决的问题之一:http://www.mulesoft.org/documentation/display/current/APIkit
答案 1 :(得分:1)
创建以下变换器。它将Jersey的响应转换为字符串
public class JerseyResponseTransformer extends AbstractMessageTransformer {
public static Logger logger = Logger.getLogger(JerseyResponseTransformer.class);
@Override
public Object transformMessage(MuleMessage message, String outputEncoding)
throws TransformerException {
logger.debug("Transfroming Jersey Response to String");
ContainerResponse cr = (ContainerResponse) message.getInvocationProperty("jersey_response");
String messageString = (String) cr.getResponse().getEntity();
message.setPayload(messageString);
return message;
}
}