2016-05-09 11 views
0

Wir haben Teilströme zwischen vielen Flüssen geteilt. Ich möchte in meinem Subflow finden, den Fluss der Anruf ist ...Mule - Wie kann ich auf den Flow-Namen innerhalb der Java-Komponente zugreifen?

MEL: -

#[flow.name] 

ist nur in Logger arbeiten.

Ich konnte diesen Wert nicht einmal in Session/Anyother-Eigenschaft (von Set-Eigenschaft-Connector) übergeben, so dass ich mit der Methode message.getProperty zugreifen kann.

Vielen Dank im Voraus.

Antwort

1

Versuchen Sie, Ihre Komponente org.mule.api.construct.FlowConstructAware. Sie sollten dann in der Lage sein, seinen Namen zu bekommen.

HTH

+0

als eingehend? Entschuldigung, könnten Sie mir bitte einige Details geben ... – sanssan

+0

Nun, Sie fragen, wie Sie es in einer Java-Komponente bekommen, so nehme ich an, Sie haben eine eigene benutzerdefinierte Klasse, wo Sie versuchen, diesen Wert zu bekommen. In diesem Fall können Sie Ihre Klasse dazu bringen, die von mir erwähnte Schnittstelle zu implementieren, und Sie erhalten einen Verweis auf den Fluss, an den Sie seinen Namen senden können. – afelisatti

0

Eine weitere einfache Möglichkeit, legen Sie es als Variable und Zugriff dann diese Variable in Java-Komponente.

+0

Ich habe das schon probiert. Gleicher Fehler bei Variablen auch ... org.mule.mvel2.UnresolveablePropertyException: Token kann nicht aufgelöst werden: Variable 'flow' kann nicht aufgelöst werden – sanssan

+0

Ändern Sie den Namen der Variablen in einen anderen Wert als 'flow'. Verwenden Sie keine Standardwörter, die im Schema – tortoise

+0

verfügbar sind. Ich habe beobachtet, dass # [flow.name] NICHT als Standard-MEL, sondern als loggerspezifische Erweiterung angezeigt wird. Sie können die FlowConstructAware zum Abrufen des Flow-Namens verwenden. – AnupamBhusari

1

In meinem Fall habe ich anderen Fluss für die Protokollierung erstellt, die eingehende VM hat. Dann habe ich es per Java-Komponente aufgerufen. Siehe Beispielcodes unten.

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

} 

hoffen, dass dies hilft :)

1

Sie für das Erhalten Flussnamen folgenden Code in Java-Komponente

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

this helps nutzen kann.

+0

Dies ist ein großartiges Beispiel für das, was ich erwähnt habe. – afelisatti

Verwandte Themen