Mule-如何访问Java组件内部的流名称?

Mule-如何访问Java组件内部的流名称?,java,mule,Java,Mule,我们确实在许多流之间共享子流。我想在我的子流中找到哪个流是调用流 梅尔:- #[flow.name] 仅在记录器中工作 我甚至无法将此值传递到Session/Anyother属性(通过设置属性连接器),因此我可以使用message.getProperty方法进行访问 提前谢谢 尝试使您的组件org.mule.api.construct.FlowConstructAware。然后你就可以得到它的名字了 HTH尝试使您的组件org.mule.api.construct.FlowConstructA

我们确实在许多流之间共享子流。我想在我的子流中找到哪个流是调用流

梅尔:-

#[flow.name]
仅在记录器中工作

我甚至无法将此值传递到Session/Anyother属性(通过设置属性连接器),因此我可以使用message.getProperty方法进行访问


提前谢谢

尝试使您的组件org.mule.api.construct.FlowConstructAware。然后你就可以得到它的名字了


HTH

尝试使您的组件org.mule.api.construct.FlowConstructAware。然后你就可以得到它的名字了


HTH

另一种简单方法,将其设置为变量,然后在java组件中访问该变量。

另一种简单方法,将其设置为变量,然后在java组件中访问该变量。

我的案例我创建了其他日志流,其中有VM入站。然后我通过Java组件调用它。请参见下面的示例代码

public class TestCallVm implements Callable{

    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        MuleMessage message = eventContext.getMessage();
        String tid = message.getProperty("tid", PropertyScope.SESSION).toString();

        MuleClient client = new MuleClient(eventContext.getMuleContext());
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("tid", message.getProperty("tid", PropertyScope.SESSION).toString());
        message.setPayload("Hello");
        client.sendNoReceive("vm://vmLogger", "Hello", map);
        client.send("vm://vmLogger", "Hello", map);
        client.send("vm://vmLogger", message, null);
        MuleMessage response = client.send("vm://vmLogger", "Ross", null);
        System.out.println("response = ");
        return null;
    }

}
公共类TestCallVm实现可调用{
@凌驾
公共对象onCall(MuleEventContext eventContext)引发异常{
MuleMessage message=eventContext.getMessage();
字符串tid=message.getProperty(“tid”,PropertyScope.SESSION).toString();
MuleClient client=newmuleclient(eventContext.getMuleContext());
Map Map=newhashmap();
map.put(“tid”,message.getProperty(“tid”,PropertyScope.SESSION).toString());
message.setPayload(“你好”);
client.sendNoReceive(“vm://vmLogger”,“Hello”,map);
send(“vm://vmLogger”,“Hello”,map);
发送(“vm://vmLogger”,消息,空);
MuleMessage response=client.send(“vm://vmLogger”,“Ross”,null);
System.out.println(“response=”);
返回null;
}
}

希望这会有所帮助:)

我的案例我创建了其他日志流,其中有VM入站。然后我通过Java组件调用它。请参见下面的示例代码

public class TestCallVm implements Callable{

    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        MuleMessage message = eventContext.getMessage();
        String tid = message.getProperty("tid", PropertyScope.SESSION).toString();

        MuleClient client = new MuleClient(eventContext.getMuleContext());
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("tid", message.getProperty("tid", PropertyScope.SESSION).toString());
        message.setPayload("Hello");
        client.sendNoReceive("vm://vmLogger", "Hello", map);
        client.send("vm://vmLogger", "Hello", map);
        client.send("vm://vmLogger", message, null);
        MuleMessage response = client.send("vm://vmLogger", "Ross", null);
        System.out.println("response = ");
        return null;
    }

}
公共类TestCallVm实现可调用{
@凌驾
公共对象onCall(MuleEventContext eventContext)引发异常{
MuleMessage message=eventContext.getMessage();
字符串tid=message.getProperty(“tid”,PropertyScope.SESSION).toString();
MuleClient client=newmuleclient(eventContext.getMuleContext());
Map Map=newhashmap();
map.put(“tid”,message.getProperty(“tid”,PropertyScope.SESSION).toString());
message.setPayload(“你好”);
client.sendNoReceive(“vm://vmLogger”,“Hello”,map);
send(“vm://vmLogger”,“Hello”,map);
发送(“vm://vmLogger”,消息,空);
MuleMessage response=client.send(“vm://vmLogger”,“Ross”,null);
System.out.println(“response=”);
返回null;
}
}

希望这会有所帮助:)

您可以使用以下代码在java组件中获取流名称

import org.mule.api.MuleEventContext;
import org.mule.api.construct.FlowConstruct;
import org.mule.api.construct.FlowConstructAware;
import org.mule.api.lifecycle.Callable;

public class LogFlowName implements Callable, FlowConstructAware {
    private FlowConstruct flowConstruct;
    @Override
    public void setFlowConstruct(FlowConstruct flowConstruct) {
         this.flowConstruct = flowConstruct;

    }
    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        //TODO  your code goes here
        System.out.println("Flow Name is : " +flowConstruct.getName());
        //TODO  your code goes here
        return eventContext.getMessage().getPayload();
    }
}

希望这有帮助。

您可以使用以下代码在java组件中获取流名称

import org.mule.api.MuleEventContext;
import org.mule.api.construct.FlowConstruct;
import org.mule.api.construct.FlowConstructAware;
import org.mule.api.lifecycle.Callable;

public class LogFlowName implements Callable, FlowConstructAware {
    private FlowConstruct flowConstruct;
    @Override
    public void setFlowConstruct(FlowConstruct flowConstruct) {
         this.flowConstruct = flowConstruct;

    }
    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        //TODO  your code goes here
        System.out.println("Flow Name is : " +flowConstruct.getName());
        //TODO  your code goes here
        return eventContext.getMessage().getPayload();
    }
}

希望这有帮助。

我已经试过了。变量也出现相同错误…org.mule.mvel2.unsolveablePropertyException:无法解析标记:无法解析变量“flow”将变量名称更改为“flow”以外的其他名称。不要使用schemaI中可用的默认单词,因为[flow.name]似乎不是标准的MEL,而是特定于记录器的扩展名。您可以使用FlowConstructAware获取流名称。我已经尝试过了。变量也出现相同错误…org.mule.mvel2.unsolveablePropertyException:无法解析标记:无法解析变量“flow”将变量名称更改为“flow”以外的其他名称。不要使用schemaI中可用的默认单词,因为[flow.name]似乎不是标准的MEL,而是特定于记录器的扩展名。您可以使用FlowConstructAware来获取流名称。您可以询问如何在Java组件中获取流名称,因此我假设您有自己的自定义类,您可以在其中尝试获取该值。在这种情况下,你可以让你的类实现我提到的接口,你会得到一个流的引用,你可以问它的名字。好吧,你问如何在Java组件中得到它,所以我假设你有一个你自己的自定义类,在那里你试图得到这个值。在这种情况下,你可以让你的类实现我提到的接口,你会得到一个流的引用,你可以询问它的名称。这是我提到的一个很好的例子。这是我提到的一个很好的例子。