【问题标题】:Mule - flow returns from Jersey ComponentMule - Jersey 组件的流量返回
【发布时间】:2013-10-19 23:47:37
【问题描述】:

我有一个使用 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

向其他流发送 Jersey 响应

如果您想将球衣组件的请求转换或发送到下一个资源/流,那么您需要使用

ContainerResponse cr = (ContainerResponse) message.getInvocationProperty("jersey_response");
String messageString = (String) cr.getResponse().getEntity();
message.setPayload(messageString); 

这会将 org.mule.module.jersey.MuleResponseWriter$1 类型转换为 String,您可以将其转发到下一个资源。

【问题讨论】:

    标签: mule


    【解决方案1】:

    注意:OP 已经对这个问题进行了彻底的审查(请参阅history),所以这个答案现在看起来没有联系。这个答案解释了 Jersey 资源如何与其他流交互。

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

    这是 APIkit 正在解决的问题之一:http://www.mulesoft.org/documentation/display/current/APIkit

    【讨论】:

    • David ... 我在 之后看到了日志语句,这让我相信该消息正在通过 。然而,该消息的类型为“org.mule.module.jersey.MuleResponseWriter”。信息 2013-10-11 15:03:51,308 [[notifications].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor:消息 $$$$$$$ org.mule。 module.jersey.MuleResponseWriter$1@6c1e42ac
    • 哦,有趣的是,无论如何,不​​要弄乱消息负载,因为它是准备好返回给调用者的资源响应。
    • Mule 文档中也显示了消息负载的混乱 :) 并且它最终会出现转换异常,因为它期望负载中带有 OutputHandler 的消息,有关如何使用的任何建议来自球衣休息服务的响应在流程中更进一步?
    【解决方案2】:

    创建了以下转换器。它将泽西岛的响应转换为字符串

    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; 
    } 
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多