Mule-从Jersey组件返回的流

Mule-从Jersey组件返回的流,mule,Mule,我有一个使用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 !!

我有一个使用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$1类型转换为字符串,您可以将其转发给下一个资源。

注意:OP对该问题进行了彻底的审查(请参阅),因此该答案现在看起来已断开连接。这个答案解释了Jersey资源如何与其他流交互

要从您的资源调用其他流,您可以:

  • 使用组件绑定:
  • 使组件类
    MuleContextAware
    ,然后使用MuleClient执行调用

这是APIkit正在解决的问题之一:

创建了以下转换器。它将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; 
} 

}

大卫。。。我看到日志声明之后,我相信消息正在过去。但是,该消息的类型为“org.mule.module.jersey.mulereponsewriter”。INFO 2013-10-11 15:03:51308[[通知].connector.http.mule.default.receiver.02]org.mule.api.processor.LoggerMessageProcessor:Message$$$$$org.mule.module.jersey.MuleResponseWriter$1@6c1e42acOh总之,很有趣,不要弄乱消息负载,因为它是准备返回给调用方的资源响应。弄乱消息负载也是Mule文档中显示的内容:)并且它最终会出现转换异常,因为它期望负载中包含OutputHandler的消息,关于如何在流程中进一步使用来自jersey rest服务的响应,有什么建议吗?
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; 
}