【问题标题】:Can I enrich a Mule message from HTTP REST service我可以丰富来自 HTTP REST 服务的 Mule 消息吗
【发布时间】:2013-10-11 09:17:51
【问题描述】:

我有一个带有 POJO 作为当前消息负载的 Mule 流。我想通过调用返回 text/plain 的 HTTP REST 服务来丰富消息。我尝试了几种不同的方法,但每次都会出错。我目前的流程如下:

<foreach doc:name="For Each">

  <enricher source="#[message.payload]" 
      target="#[variable:agentCode]" doc:name="Message Enricher">

    <http:outbound-endpoint exchange-pattern="request-response" host="localhost"
     port="8080" 
     path="ods.service/agent/agentCode/#[message.payload.getAgentEntityNumber()]" 
     method="GET" mimeType="text/plain" doc:name="HTTP"/>

  </enricher>

 <component class="za.co.sci.mule.agt.MoveVariablesToPayload" 
    doc:name="Move variables to message"/>

</foreach>

丰富器之后的组件只是将变量值移动到我的 POJO 中。当我执行此操作时,我得到:

An invalid return type "interface org.mule.api.MuleMessage" 
was specified for transformer "JAXBMarshallerTransformer"

这对我来说没有多大意义,但我尝试关闭传输变压器,我得到:

java.lang.ClassCastException: org.mule.transport.http.ReleasingInputStream 
cannot be cast to java.lang.Integer

哪种有意义,但没有真正的帮助。

我的问题是,是否可以通过调用简单的text/plain REST 服务来丰富消息?如果是这样,我该如何构建我的浓缩器?

更新

按照以下建议进行更改,但仍然相同。完整的堆栈跟踪:

ERROR 2013-10-11 16:01:03,998 [[sci_silica_interface].connector.http.mule.default.receiver.02] org.mule.exception.CatchMessagingExceptionStrategy: 
********************************************************************************
Message               : An invalid return type "interface org.mule.api.MuleMessage" was specified for transformer "JAXBMarshallerTransformer"
Code                  : MULE_ERROR-266
--------------------------------------------------------------------------------
Exception stack is:
1. An invalid return type "interface org.mule.api.MuleMessage" was specified for transformer "JAXBMarshallerTransformer" (org.mule.api.transformer.TransformerException)
  org.mule.module.xml.transformer.jaxb.JAXBMarshallerTransformer:122 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
org.mule.api.transformer.TransformerException: An invalid return type "interface org.mule.api.MuleMessage" was specified for transformer "JAXBMarshallerTransformer"
    at org.mule.module.xml.transformer.jaxb.JAXBMarshallerTransformer.doTransform(JAXBMarshallerTransformer.java:122)
    at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:411)
    at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:363)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

org.mule.api.transport.DispatchException: Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=http://localhost:8080/ods.service/agent/agentCode/12345, connector=HttpConnector

【问题讨论】:

    标签: java http rest mule


    【解决方案1】:

    如果您想将&lt;http:outbound-endpoint /&gt; 的结果存储到一个变量中,您需要首先使用流。

    要做到这一点,你只需要将这个交给你的浓缩器:

    <processor-chain>
       http:outbound-endpoint exchange-pattern="request-response" host="localhost"
     port="8080" 
     path="ods.service/agent/agentCode/#[message.payload.getAgentEntityNumber()]" 
     method="GET" mimeType="text/plain" doc:name="HTTP"/>
       <object-to-string-transformer />
    </processor-chain>
    

    【讨论】:

    • 在浓缩器内?编译器不喜欢那样。
    • 我根据您的评论改进了我的答案
    • 感谢您的帮助,但仍然失败。我很确定 HTTP 端点上发生了错误,甚至在它到达 object-to-string-transformer 之前我会将完整的堆栈跟踪添加到问题中。
    • 我编辑了您的代码,为 HTTP 端点内的字符串转换器添加了一个额外的对象。似乎出于某种原因两者都需要。
    【解决方案2】:

    我最终放弃了尝试使用 HTTP 端点。相反,我编写了一个自定义 Java 类,它执行 REST 调用和丰富(它实现了Callable)。我使用&lt;component&gt; 标记将其包含在流程中。我仍然相信有一个更正确的方法,但是找不到任何示例,并且这种方法有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多