Mule ESB Java组件3.8 Doc

时间:2016-06-28 01:46:51

标签: mule mule-component

我正在尝试回复官方文档中的基本Java组件示例:

https://docs.mulesoft.com/mule-user-guide/v/3.8/java-component-reference

IDE是v.6.0.1

我意识到Java类应该扩展Callable。这与以前版本的MULE有很大不同。所以在我的情况下

package javacomponent;

import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;

public class helloWorldComponent implements Callable{
@Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        eventContext.getMessage().setInvocationProperty("myProperty", "Hello World!");
        return eventContext.getMessage().getPayload();
    }
}

我遇到的问题是,在运行应用程序并制作http / get to localhost之后:8081我无法访问Hello World!在浏览器中呈现的消息。

上一版本有什么变化吗?我还应该包括一个setPayload元素吗?

2 个答案:

答案 0 :(得分:2)

参考代码,它设置调用属性变量,并返回现有的 Payload ,它可以是{NullPayload},因为不是定义了。尝试调试和评估 Mule Debugger 中的 Variables 选项卡,您应该找到一个名为myProperty的新变量。

要获取基本的Hello World文本,请执行以下选项之一:

  1. 设置 Payload 而不是 Invocation Property (将其替换或添加到现有代码中):eventContext.getMessage().setPayload("Hello World!");
  2. 返回调用属性而不是 Payload return eventContext.getMessage().getInvocationProperty("myProperty");

答案 1 :(得分:0)

要检查的第一件事是您正确地实例化Java类。我不清楚配置Java对象的UI或可视方式。我发现了一个非常简单的Spring配置示例:

    <spring:bean id="ordersTransform" name="OrdersTransformSingleton" class="org.dlw.transport.OrdersTransformSingleton" scope="singleton" />

并且,Java对象组件:                               

首先检查它,并确保在运行时实例化您的类。然后在您实现的可调用方法中添加一个断点,并查看应用程序指针是否让您进入该方法。如果是这样,请将您的消息添加到有效负载。

public Object onCall(MuleEventContext eventContext) throws Exception {
    // freshen
    this.transportObj = null;
    this.transportObj = new ArrayList<OrdersValueObject>();

    MuleMessage res = eventContext.getMessage();
    List<Map> list = (LinkedList) res.getPayload();
  ...       
    res.setPayload(transportObj);
    return res;
}

请记住设置有效负载并返回消息。