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组件中得到它,所以我假设你有一个你自己的自定义类,在那里你试图得到这个值。在这种情况下,你可以让你的类实现我提到的接口,你会得到一个流的引用,你可以询问它的名称。这是我提到的一个很好的例子。这是我提到的一个很好的例子。