2016-09-16 4 views
1

Gibt es eine Möglichkeit, Federeigenschaften in einem ternären Ausdruck auf dem expression Feld eines Spring header-enricher zu verwenden? Etwas, das wie folgt aussieht:Spring Integration Conditional SpEL mit Eigenschaften

<int:header-enricher> 
    <int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : ${route2.db}"/> 
</int:header-enricher> 

Dies führte zu einer Fehlermeldung, Unexpected token. Expected 'colon(:)' but was 'lcurly({)'. Vielleicht habe ich etwas verpasst.

Antwort

3

versuchen

<int:header-enricher> 
    <int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? '${route1.db}' : '${route2.db}'"/> 
</int:header-enricher> 

oder

<int:header-enricher> 
    <int:header name="DESTINATION" expression="#{headers['DATA'].routingKey == 'ROUTE1' ? '${route1.db}' : '${route2.db}'}"/> 
</int:header-enricher> 
+0

Danke @Hassen! Der erste Vorschlag half mir zu erkennen, dass die Eigenschaft 'route1.db' nicht existierte. Obwohl dies nur ein Teil der Fehlerbehebung ist, akzeptiere ich dies als Antwort. –

1

Die Ursache für Unexpected token. Expected 'colon(:)' but was 'lcurly({)' war, dass kein Eigentum dort route1.db bestehenden in den Eigenschaften war Datei, und daher wurde die Expression als headers['DATA'].routingKey == 'ROUTE1' ? ${route1.db} : some-alternative-db ausgewertet, ${route1.db} unverändert bleibt. Dies führt zu einem Syntaxfehler.

Zusätzlich schlug @Hassen vor, einzelne Anführungszeichen anzugeben, die benötigt werden, um die Werte aus Eigenschaftsdateien als richtige Zeichenfolgen darzustellen. Ohne diesen Wert behandelt der ausgewertete Ausdruck headers['DATA'].routingKey == 'ROUTE1' ? direct-db : some-alternative-db sowohl direct-db als auch some-alternative-db als Spring-Felder/-Eigenschaften, bei denen es sich sogar um falsch benannte Variablen handelt.

Die letzte sollte gültige Form sein:

<int:header name="DESTINATION" expression="headers['DATA'].routingKey == 'ROUTE1' ? '${route1.db}' : '${route2.db}'"/> 

und angegeben, dass die Eigenschaften folgende Angaben enthalten Datei:

route1.db=direct-db route2.db=some-alternative-db

der ausgewertete Ausdruck wird:

headers['DATA'].routingKey == 'ROUTE1' ? 'direct-db' : 'some-alternative-db'