Etzel Art of Digital Manufacturing
Bize ulaşın
Lunex 1.6.0 kullanım kılavuzu

İfade dilini işinize göre seçin

Expression dillerini karşılaştırın; veri türü, bağımlılık ve kullanım amacına göre seçim yapın.

Language, seçtiğiniz adımın bir değeri nasıl hesaplayacağını veya bir koşulu nasıl değerlendireceğini belirler. Aynı akışta farklı adımlar farklı diller kullanabilir. Projenin tamamını Groovy’ye veya JavaScript’e çevirmeniz gerekmez.

Dil seçimi için Designer → adım → Properties → Language açın. Listedeki her seçenek genel amaçlı bir programlama dili değildir: Header yalnızca bir başlığı okurken Groovy bir hesaplama veya dönüşüm betiği çalıştırır. Sağ panel rehberi, Language ve Expression alanlarının yerini açıklar.

Üç farklı kararı ayırın

Body, header, property ve variable’ın nerede tutulduğunu temel kavramlar açıklar. Dil seçimi bu alanların yerini değiştirmez; onları nasıl okuyacağınızı belirler.

KararÖrnekNe belirler?
Akışın tanımı.camel.yaml, Designer/CodeAdımları, sıralarını ve bağlantıları.
Adımın expression diliSimple, Groovy, JSONPathO adımda değer/koşul hesaplamasını.
Özel kod veya kaynakJava bean, .groovy, XSLT dosyasıAkışın çağırdığı yeniden kullanılabilir işlevi veya dönüşümü.

Language → Java, bir expression değerlendirir; Java route dosyası veya Bean/Process kullanımıyla aynı seçim değildir. XSLT ise bu Language listesindeki bir seçenek olarak aranmaz; XSLT component’i ve kaynak dosyasıyla kullanılır.

Nereden başlamalısınız?

Yapacağınız işİlk seçenekÖrnek
Değişmeyen değer yazmakConstantOrder received
Mesajdan bir metin üretmek veya basit karşılaştırma yapmakSimpleOrder ${body[id]}
Bir header/property’yi olduğu gibi almakHeader / ExchangePropertyOrderId — bu iki dilde ${…} yazılmaz.
JSON içinden alan/liste seçmekJSONPath$.order.id
XML içinden alan veya koşul seçmekXPathstring(/order/@id)
Birden çok alanı hesaplamak veya yeni bir nesne kurmakGroovy[id: body.id, units: body.quantity]
JSON üzerinde sorgu/dönüşüm yapmakJQ.order.id
Satırlara veya ayraçlara göre parçalamakTokenizeSplit’in bölme ifadesi; ayraç ayrı ayarlanır.
Mevcut Java işlevini kullanmakBean Method veya Bean adımıKayıtlı bean ve çağrılacak method.

Bir dil değiştirildiğinde eski ifadenin otomatik çevrildiğini varsaymayın. Simple’daki ${body[id]}, JSONPath’teki $.id ve Groovy’deki body.id aynı sözdizimi değildir. Yeni dilin ifadesini yazın, veri türünü kontrol edin ve aynı örneği yeniden çalıştırın.

Dil seçicisindeki seçenekler

Aşağıdaki tablo, editörde sunulan seçeneklerin amaçlarını karşılaştırır. Runtime’ın ilgili dil kütüphanesini yükleyebilmesi ve script kaynaklarını bulabilmesi de gerekir. Katalogda görünmek, her ortamda bütün bağımlılıkların önceden kurulu olduğu anlamına gelmez.

Değer okuma ve kısa ifadeler

SeçenekYAML anahtarıKullanımı / farkı
ConstantconstantSabit değer; ${body} metnini mesajdan okumaz.
SimplesimpleBody, header, property, metin üretimi ve koşullar için günlük başlangıç.
CSimplecsimpleDerlenen Simple ifadeleri; derleme ve tür hazırlığı gerektirir. Simple seçimini yalnız adı benziyor diye değiştirmeyin.
HeaderheaderExpression alanına yazılan isimdeki mesaj başlığını okur.
ExchangePropertyexchangePropertyİlgili exchange property değerini okur; application.properties anahtarı değildir.
Variablevariableİlgili kapsamda tanımlanmış değişkeni okur; önce o değişkenin nasıl oluşturulduğunu belirleyin.
Bean MethodmethodRegistry’deki Java bean’in method’unu çağırır; bean ve bağımlılıkları hazırlanmalıdır.
RefrefRegistry’de kayıtlı mevcut expression/predicate’i kullanır; rastgele dosya yolu değildir.
LanguagelanguageAdıyla çözümlenen özel bir dil uygulamasını kullanır; uygulama runtime’da kayıtlı olmalıdır.

Yapısal veri ve bölme

SeçenekYAML anahtarıKullanımı / farkı
JSONPathjsonpathJSON verisinde alan veya liste seçimi; tek sonuç ile liste sonucunu ayırın.
JQjqJSON sorgulama, filtreleme ve dönüşüm; JSONPath ile aynı ifade sözdizimini kullanmaz.
XPathxpathXML düğümü, metni veya koşulu; namespace ve sonuç türü önemlidir.
XQueryxqueryXML üzerinde sorgu ve daha kapsamlı XML üretimi/dönüşümü.
TokenizetokenizeMetni ayraç/desene göre parçalara ayırır; sıklıkla Split ile kullanılır.
XML TokenizextokenizeXML parçalarını XML yapısını gözeterek ayırır. Düz metin ayıracıyla aynı iş değildir.
HL7 Terserhl7terserHL7 mesaj alanlarını konum gösterimiyle okur; HL7 veri ve kütüphane hazırlığı gerekir.
DataSonnetdatasonnetYapısal veri dönüşümleri; giriş/çıkış media type ayarlarını dönüşümle birlikte belirleyin.

Script, nesne ifadeleri ve özel çalışma biçimleri

SeçenekYAML anahtarıKullanımı / farkı
GroovygroovyJava nesneleriyle çalışabilen script; yeni nesne, koşul ve çok adımlı hesaplama için uygundur.
JavaScriptjsRuntime içindeki JavaScript değerlendirmesi. Tarayıcı DOM’u, Node.js veya npm ortamı değildir.
PythonpythonCamel’in Python dil uygulamasında ifade çalıştırır. Bilgisayarınızdaki Python/pip paketlerinin burada bulunduğunu varsaymayın.
JavajavaÇalışma zamanında derlenen Java ifadesi; gerekli sınıfların classpath’te bulunması gerekir.
JactljactlJactl sözdiziminde script; Groovy veya JavaScript ifadesi doğrudan taşınmaz.
MVELmvelMVEL ifade/template değerlendirmesi; kendi sözdizimi ve kütüphanesi vardır.
OGNLognlNesne özellikleri ve method’ları üzerinden ifade değerlendirme. Simple’ın tamamıyla aynı dil değildir.
SpELspelSpring Expression Language ifadeleri; projenin tamamının Spring uygulaması olması anlamına gelmez.
WasmwasmHazırlanmış WebAssembly işlevini çağırır; modül ve çağrı sözleşmesi ayrıca sağlanır.

JavaScript ve Python’ın runtime bağlamı ve bağımlılıkları kendi JavaScript ve Python referanslarında açıklanır. Listeyi bir dil öğrenme zorunluluğu olarak değerlendirmeyin; çoğu akış için birkaç uygun dil yeterlidir.

Expression nerede kullanıldığına göre ne yapar?

Adımİfadenin sonucu
Set BodyYeni body olur.
Set Header / Set PropertyAdı belirtilen header/property değerine yazılır.
Choice / Filter / ValidateDoğru/yanlış koşulu olarak kullanılır.
SplitBölünecek liste, metin veya uygun parçalanabilir değeri üretir.
ScriptScript’in dönüş değerini body’ye otomatik yazmaz; mesaj değişikliği script içinde açıkça yapılır.

Bu yüzden “Groovy yazdım ama body değişmedi” durumunda önce kullanılan adımı kontrol edin. Groovy rehberi, Set Body ile Script farkını aynı girdi üzerinde gösterir.

JSONPath ve XPath ile küçük denemeler

Bir Set Body adımını tek başına seçip Use only this step kullanın. Aşağıdaki değerleri Properties ve Input arasında girin:

DenemeLanguage / ExpressionInputBeklenen sonuç
JSON’dan kimlikJSONPath / $.order.idJSON text: {"order":{"id":"A-100"}}A-100
XML’den kimlikXPath / string(/order/@id); Expression properties → Result Type: java.lang.StringXML: <order id="A-100"/>A-100

JSONPath için camel-jsonpath, XPath için camel-xpath bağımlılığını hazırlayın. JSONPath JSON metnini kendisi okuyabilir; Groovy ile body.order.id yazacaksanız body’nin nesne olması gerekir. XPath’in düğüm listesi üretmesiyle String üretmesi de farklıdır. XML namespace’leri ve bulunamayan JSON alanları için JSONPath ve XPath seçeneklerini inceleyin; hatayı gizlemek yerine beklenen eksik-alan davranışını belirleyin.

Bağımlılıkları ve veri türünü hazırlayın

Mevcut camel.jbang.dependencies listesini koruyarak gereken kütüphaneyi ekleyin. Örneğin yalnız camel-console bulunan bir projede bu rehberin Groovy/JSON örnekleri için:

camel.jbang.dependencies=camel-console,camel-groovy,camel-jackson,camel-jsonpath,camel-xpath

Her dil için bu listenin tamamı gerekli değildir. Bağımlılıkların geliştirme, simülasyon ve paketlenmiş çalışma ortamında çözümlendiğini doğrulayın. Simülasyon gerekli bağımlılığı hazırlarken ilk deneme uzayabilir. Ağ/depo erişimi veya uyumsuz sürüm hatası, expression’ın sözdizimi hatasından farklıdır. Ayrıntılar bağımlılık rehberindedir.

Body’nin metin, nesne veya liste olması sonucu değiştirir. {"id":"A-100"} görünen bir JSON text, Groovy açısından henüz bir Map değildir. Gerçek route’ta Unmarshal → JSON / Jackson, simülasyonda nesneyi doğrudan veriyorsanız JSON value kullanın. Sonuçta üretilen nesneyi HTTP/mesajlaşma çıkışına JSON metni olarak vermek için gerektiğinde Marshal ekleyin.

Öğrenme sırası: Simple ile değer ve koşul yazma → Groovy ile dönüşüm ve script → EIP’lerle akışı yönlendirme.

Lunex’i kendi entegrasyonunuzla görün

Kılavuzda okuduklarınızı kendi sistemlerinizle deneyelim. Demo için bize yazın.